2016-10-10 7 views
1

Googleマップアプリケーション用のPlacePickerを作成しようとしています。ガイドはひどく時代遅れではないので、非難された機能を使用するとは思っていませんでした。それが判明したように、私はちょっとこの問題に対処する方法について混乱しています。私はまだAndroid Developmentには新しいものです。Android Studio(Google PlacePicker)でIntentBuilderが認識されない

以前はIntentBuilderを使ったことがないので、正しく使用されているかどうかはわかりません。それは、Androidがそれがまったく何かを知らないのは、提案された解決策がそれをクラスにしているように見えるようです。ここでAndroidのメーカーによって

import android.app.Activity; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.os.Build; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.support.v4.content.ContextCompat; 
import android.view.View; 
import android.view.ViewTreeObserver; 
import android.widget.Button; 
import android.widget.Toast; 

import com.firebase.client.ChildEventListener; 
import com.firebase.client.DataSnapshot; 
import com.firebase.client.Firebase; 
import com.firebase.client.FirebaseError; 
import com.firebase.client.ServerValue; 
import com.google.android.gms.common.GoogleApiAvailability; 
import com.google.android.gms.common.GooglePlayServicesNotAvailableException; 
import com.google.android.gms.common.GooglePlayServicesRepairableException; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.location.places.Place; 
import com.google.android.gms.location.places.PlaceBuffer; 
import com.google.android.gms.location.places.Places; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.LatLngBounds; 
import com.google.android.gms.maps.model.MarkerOptions; 

import java.util.HashMap; 
import java.util.Map; 

public class PlacePicker extends FragmentActivity implements OnMapReadyCallback, ChildEventListener { 

private GoogleMap mMap; 
private GoogleApiClient mGoogleApiClient; 
private LatLngBounds.Builder mBounds = new LatLngBounds.Builder(); 
private static final int REQUEST_PLACE_PICKER = 1; 
public static final int REQUEST_ID_ACCESS_COURSE_FINE_LOCATION = 100; 

private static final String FIREBASE_URL = "MYURL"; 
private static final String FIREBASE_ROOT_NODE = "checkouts"; 

private Firebase mFirebase; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_place_picker); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

    // Set up the API client for Places API 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Places.GEO_DATA_API) 
      .build(); 
    mGoogleApiClient.connect(); 

    final Button button = (Button) findViewById(R.id.checkout_button); 
    button.getViewTreeObserver().addOnGlobalLayoutListener(
      new ViewTreeObserver.OnGlobalLayoutListener() { 
       @Override 
       public void onGlobalLayout() { 
        mMap.setPadding(0, button.getHeight(), 0, 0); 
       } 
      } 
    ); 

    Firebase.setAndroidContext(this); 
    mFirebase = new Firebase(FIREBASE_URL); 
    mFirebase.child(FIREBASE_ROOT_NODE).addChildEventListener(this); 


} 

public void checkOut(View view) { 
    try { 
     PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder(); 
     Intent intent = intentBuilder.build(this); 
     startActivityForResult(intent, REQUEST_PLACE_PICKER); 
    } catch (GooglePlayServicesRepairableException e) { 
     GoogleApiAvailability.getInstance().getErrorDialog(this, e.getConnectionStatusCode(), 
       REQUEST_PLACE_PICKER); 
    } catch (GooglePlayServicesNotAvailableException e) { 
     Toast.makeText(this, "Please install Google Play Services!", Toast.LENGTH_LONG).show(); 
    } 
} 

private void addPointToViewPort(LatLng newPoint) { 
    mBounds.include(newPoint); 
    mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(mBounds.build(), 
      findViewById(R.id.checkout_button).getHeight())); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_PLACE_PICKER) { 
     if (resultCode == Activity.RESULT_OK) { 
      Place place = PlacePicker.getPlace(data, this); 

      Map<String, Object> checkoutData = new HashMap<>(); 
      checkoutData.put("time", ServerValue.TIMESTAMP); 

      mFirebase.child(FIREBASE_ROOT_NODE).child(place.getId()).setValue(checkoutData); 

     } else if (resultCode == PlacePicker.RESULT_ERROR) { 
      Toast.makeText(this, "Places API failure! Check the API is enabled for your key", 
        Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

@Override 
public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
    String placeId = dataSnapshot.getKey(); 
    if (placeId != null) { 
     Places.GeoDataApi 
       .getPlaceById(mGoogleApiClient, placeId) 
       .setResultCallback(new ResultCallback<PlaceBuffer>() { 
             @Override 
             public void onResult(PlaceBuffer places) { 
              LatLng location = places.get(0).getLatLng(); 
              addPointToViewPort(location); 
              mMap.addMarker(new MarkerOptions().position(location)); 
              places.release(); 
             } 
            } 
       ); 
    } 
} 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 


    if (Build.VERSION.SDK_INT >= 23) { 
     int accessCoarsePermission 
       = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION); 
     int accessFinePermission 
       = ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION); 


     if (accessCoarsePermission != PackageManager.PERMISSION_GRANTED 
       || accessFinePermission != PackageManager.PERMISSION_GRANTED) { 
      // The Permissions to ask user. 
      String[] permissions = new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, 
        android.Manifest.permission.ACCESS_FINE_LOCATION}; 
      // Show a dialog asking the user to allow the above permissions. 
      ActivityCompat.requestPermissions(this, permissions, 
        REQUEST_ID_ACCESS_COURSE_FINE_LOCATION); 

      return; 
     } 
    } 
    mMap.setMyLocationEnabled(true); 
    mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 
     @Override 
     public void onMyLocationChange(Location location) { 
      LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); 
      addPointToViewPort(ll); 
      // we only want to grab the location once, to allow the user to pan and zoom freely. 
      mMap.setOnMyLocationChangeListener(null); 
     } 
    }); 
    // Add a marker in Sydney and move the camera 

} 

またgetPlaceとRESULT_ERRORがある赤aswell、と認識されていない:

はここに関連するコードです。

私は問題のガイドへのリンクを投稿することが許可されているかどうかわからないので、質問された場合にのみ投稿します。

私はAndroidスタジオにまだかなり新しいので、すべての助けが大変ありがとうございます!

+0

インポートを追加した中で、あなたの依存関係にこれを追加してください? 'import com.google.android.gms.location.places.ui.PlacePicker;' – antonio

+0

@antonioでは、特定のインポートもrecoqnizedされませんが、すべての通常の場所インポートを追加しました。私は輸入品で私の答えを編集しました。 –

+0

使用しているGoogle Playサービスのバージョンによっては、[新しいアクセス許可モデル](https://developer.android.com/training/permissions/index.html)のアプリで変更を加える必要があります。 。 バージョン8.1以降のGoogle Playサービスを使用している場合は、[プレイスの選択権限](https://developers.google.com/places/android-api/placepicker#permissions)に記載されているとおり、 Android 6.0 Marshmallow SDKをターゲットにして、新しい権限モデルを使用するようにします。 – Teyam

答えて

0

あなたapp.gradleファイル

compile 'com.google.android.gms:play-services-places:9.2.0' 
+0

9.4.0を使用する必要がありますか? IntentBuilderは廃止されましたか? –

+0

あなたは9.2.0 以降にプレイスライブラリを追加し、コード内にあればこれを変更する必要があります import com.google.android.gms.location.places; 〜 import com.google.android.gms.location.places.Place; – zombie

+0

は9.4.0の場所のライブラリから9.2.0の場所のライブラリに移動しようとしましたが、私はまだ同じエラーが発生しています。 –

関連する問題