基本上我正在尝试为Android实施PLACE_PICKER,我在这里遇到了这个令人困惑的错误:
int PLACE_PICKER_REQUEST = 1;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
Context context = getApplicationContext();
startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
错误出现在第4行:“(builder.build(context),”我不明白为什么,我将它作为错误在它下面得到它: 未处理的例外:com.google.android.gms.common.GooglePlayServicesRepairableException,com.google.android.gms.common.GooglePlayServicesNotAvailableException。
多年来一直在努力...任何帮助?
答案 0 :(得分:4)
看起来主要问题是您使用旧版Google Play服务。因此,为了让它适合您,您需要更新设备或模拟器上安装的Google Play服务版本。
这也表明您没有任何代码可以检查设备上是否存在所需的版本,这是您必须添加的内容,因为该字段中的用户可能会遇到同样的问题。
如果设备上当前版本的版本低于您的应用所需的版本,该框架可以为用户添加提示更新Google Play服务的简便方法。
这是一个我刚刚开始工作的简单例子。
首先,创建一个成员变量status
:
int status;
然后,在您的活动的onCreate()
中,检查Google Play服务是否可用。如果没有,则显示将提示用户升级的对话框:
status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (status != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
GooglePlayServicesUtil.getErrorDialog(status, this,
100).show();
}
}
然后,当您想要展示PlacePicker时,请确保status
表示Google Play服务可用。如果不满足此条件,您可能还想向用户提供一些指示(在此处添加else
)(另请注意额外的try / catch)。
if (status == ConnectionResult.SUCCESS) {
int PLACE_PICKER_REQUEST = 199;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
Context context = this;
try {
startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
}
您还可以添加的另一件事是重新检查onActivityResult()
中的状态,以查看用户是否更新了Google Play服务。
这也是您获取PlacePicker对话框结果的地方:
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100){
status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
}
if (requestCode == 199){
//process Intent......
Place place = PlacePicker.getPlace(data, this);
String toastMsg = String.format("Place: %s", place.getName());
Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
}
}
结果:
答案 1 :(得分:0)
For Fragment
try {
int PLACE_PICKER_REQUEST = 1;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
}catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException ex){
ex.printStackTrace();
}