Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio中无法识别IntentBuilder(Google PlacePicker)_Android_Google Maps_Android Intent_Gmsplacepicker - Fatal编程技术网

Android Studio中无法识别IntentBuilder(Google PlacePicker)

Android Studio中无法识别IntentBuilder(Google PlacePicker),android,google-maps,android-intent,gmsplacepicker,Android,Google Maps,Android Intent,Gmsplacepicker,我正在尝试为我的谷歌地图应用程序创建一个位置选择器,并找到了一个很好的指南。这本指南还没有过时,所以我没想到它会使用任何不推荐的功能。事实证明,确实如此,我对如何处理这个问题有点困惑,我对Android开发还是新手 我以前从未使用过IntentBuilder,所以我不确定它是否正确使用。似乎Android根本不知道它是什么,因为建议的解决方案是让它成为一个类 以下是相关代码: import android.app.Activity; import android.content.Intent;

我正在尝试为我的谷歌地图应用程序创建一个位置选择器,并找到了一个很好的指南。这本指南还没有过时,所以我没想到它会使用任何不推荐的功能。事实证明,确实如此,我对如何处理这个问题有点困惑,我对Android开发还是新手

我以前从未使用过IntentBuilder,所以我不确定它是否正确使用。似乎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

}
导入android.app.Activity;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.location.location;
导入android.os.Build;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.app.FragmentActivity;
导入android.os.Bundle;
导入android.support.v4.content.ContextCompat;
导入android.view.view;
导入android.view.ViewTreeObserver;
导入android.widget.Button;
导入android.widget.Toast;
导入com.firebase.client.ChildEventListener;
导入com.firebase.client.DataSnapshot;
导入com.firebase.client.firebase;
导入com.firebase.client.firebase错误;
导入com.firebase.client.ServerValue;
导入com.google.android.gms.common.GoogleAppAvailability;
导入com.google.android.gms.common.GooglePlayServicesNotAvailableException;
导入com.google.android.gms.common.GooglePlayServicesRepairableException;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.common.api.ResultCallback;
导入com.google.android.gms.location.places.Place;
导入com.google.android.gms.location.place.PlaceBuffer;
导入com.google.android.gms.location.places.places;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.OnMapReadyCallback;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.LatLngBounds;
导入com.google.android.gms.maps.model.MarkerOptions;
导入java.util.HashMap;
导入java.util.Map;
公共类PlacePicker扩展了FragmentActivity在MapreadyCallback、ChildEventListener上的实现{
私有谷歌地图;
私人GoogleapClient MGoogleapClient;
私有LatLngBounds.Builder mBounds=新LatLngBounds.Builder();
私有静态最终整数请求\u位置\u选择器=1;
公共静态最终整数请求\u ID\u访问\u课程\u罚款\u位置=100;
私有静态最终字符串FIREBASE\u URL=“MYURL”;
私有静态最终字符串FIREBASE\u ROOT\u NODE=“checkout”;
私人消防基地;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u place\u picker);
//获取SupportMapFragment,并在地图准备好使用时收到通知。
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
//为Places API设置API客户端
mgoogleapclient=新的Googleapclient.Builder(此)
.addApi(Places.GEO_数据_API)
.build();
mGoogleApiClient.connect();
最终按钮按钮=(按钮)findViewById(R.id.checkout_按钮);
button.getViewTreeObserver().addOnGlobalLayoutListener(
新建ViewTreeObserver.OnGlobalLayoutListener(){
@凌驾
公共图书馆{
mMap.setPadding(0,button.getHeight(),0,0);
}
}
);
Firebase.setAndroidContext(this);
mFirebase=新的Firebase(Firebase\u URL);
mFirebase.child(FIREBASE\u根节点).addChildEventListener(此);
}
公共作废签出(视图){
试一试{
PlacePicker.IntentBuilder IntentBuilder=新的PlacePicker.IntentBuilder();
Intent=intentBuilder.build(this);
startActivityForResult(意图、请求、地点、选取者);
}捕获(谷歌游戏服务可修复例外){
GoogleAppAvailability.getInstance().getErrorDialog(例如,getConnectionStatusCode(),
请求(放置)(取样器);;
}捕获(谷歌PlayServicesNotAvailableException){
Toast.makeText(这是“请安装Google Play服务!”,Toast.LENGTH_LONG.show();
}
}
专用void addPointToViewPort(LatLng newPoint){
mBounds.包括(新点);
mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(mBounds.build()),
findviewbyd(R.id.checkout_按钮).getHeight());
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==请求位置选择器){
if(resultCode==Activity.RESULT\u确定){
Place-Place=PlacePicker.getPlace(数据,此);
Map checkoutData=new HashMap();
checkoutData.put(“time”,ServerValue.TIMESTAMP);
mFirebase.child(FIREBASE\u ROOT\u NODE).child(place.getId()).setValue(checkoutData);
}else if(resultCode==PlacePicker.RESULT\u错误){
Toast.makeText(这是“放置API失败!检查API是否为您的密钥启用”,
Toast.LENGTH_LONG).show();
}
}否则{
super.onActivityResult(请求代码、结果代码、数据);
}
}
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
字符串placeId=dataSnapshot.getKey();
if(placeId!=null){
Places.GeoDataApi
.getPlaceById(mGoogleApiClient,placeId)
.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(PlaceBuffer places){
LatLng location=places.get(0.getLatLng();
addPointToViewPort(位置);
compile 'com.google.android.gms:play-services-places:9.2.0'