用户流程:点击一个按钮,重定向到MapActivity,其中显示了Google地图。给出一个位置,有一个按钮用于使用当前位置到达给定位置的路线。关闭位置服务后,系统会提示用户将其打开。
private void goToLocationSettings(){
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS );
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1) {
switch (requestCode) {
case 1: Log.e("test", "onActivityResult");
break;
}
}
}
当用户返回功能时应该能够完成。但该程序再次打开设置。永远不会显示日志。
如果我在设备上打开位置服务后稍等一下,我就没有问题打开它,但是日志消息仍未显示。
我不知道我做错了什么。
答案 0 :(得分:7)
您正在检查错误的resultCode
,以避免混淆使用常量Activity#RESULT_OK和Activity#RESULT_CANCELED。如果查看文档,则可以看到RESULT_OK
的int值为-1。
在为结果启动位置设置活动的情况下,resultCode
将始终为0,因为用户使用后退按钮退出设置活动,因此系统看起来他已取消请求。
static final int LOCATION_SETTINGS_REQUEST = 1;
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == LOCATION_SETTINGS_REQUEST) {
// user is back from location settings - check if location services are now enabled
checkGPS();
}
}
答案 1 :(得分:0)
没有结果意图的对话框可能像这样,我们需要允许用户导航和检查位置服务
接受
在为结果启动“位置设置活动”时,由于用户使用“后退”按钮退出“设置活动”,因此resultCode始终为0,因此对于系统来说,他看起来像是取消了请求。
代码类似于此处,允许dilog导航到设置页面。
public void showLocationAlert() {
if (!ismctLocationEnabled(this)) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(ContentTransferBaseActivity.this);
alertDialog.setTitle(R.string.mct_enable_Location_title);
alertDialog.setMessage(R.string.mct_enable_location_message);
alertDialog.setCancelable(true);
alertDialog.setPositiveButton(R.string.mct_button_Enable,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
alertDialog.setNegativeButton(R.string.mct_button_Dismiss,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
if(!ismctLocationEnabled(this)) {
alertDialog.show();
}else
{
AlertDialog dialog=alertDialog.create();
dialog.dismiss();
}
}
}
public static boolean ismctLocationEnabled(Context context) {
int locationMode = 0;
String locationProviders;
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
try {
locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
return false;
}
return locationMode != Settings.Secure.LOCATION_MODE_OFF;
} else {
locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
return !TextUtils.isEmpty(locationProviders);
}
}