Stop an intent after a redirection to setting menu
我目前正在开发一款在googleMaps视图中使用GPS定位的应用。 我检查GPS功能是否被激活,如果没有,我将用户重定向到设置菜单。
问题是我不知道什么时候杀了这个意图。
这是我的代码的罪名部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Button btnLocateMe = (Button)findViewById(Rsendlocationinfo.id.locateme); btnLocateMe.setOnClickListener(new OnClickListener() { public void onClick(View v) { Context context = getApplicationContext(); objgps = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //Check GPS configuration if ( !objgps.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) { //Warn the user that its GPS is not activated Toast gpsActivationCheck = Toast.makeText(context,"GPS deactivated - Touch to open the GPS settings.", Toast.LENGTH_LONG); gpsActivationCheck.show(); //Open the GPS settings menu on the next onTouch event //by implementing directly the listener method - dirt manner mapView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { //And here is my problem - How to kill this process startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0); return false; } }); } else { //Location acquisition. } |
我尝试了一些stopself(),finish(),在onStop(),onDestroy(),onPause()......它崩溃或什么都不做......
你能帮我个忙吗?
好的,我终于找到了。
我将尝试清楚地解释行为的差异:
旧行为:
- 启动程序
- 谷歌地图活动开始
- 用户接受重定向到设置菜单以激活GPS
- 显示设置菜单
- 用户点击"主页"按钮
-
用户重新启动应用程序
=>显示设置菜单,因为它是应用程序历史堆栈中的最新意图。
启动此意图的代码是:
1 | startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0); |
新行为:
- 启动程序
- 谷歌地图活动开始
- 用户接受重定向到设置菜单以激活GPS
- 显示设置菜单
- 用户点击"主页"按钮
-
用户重新启动应用程序
=>显示Google地图,而不是设置菜单,因为我已将标志FLAG_ACTIVITY_NO_HISTORY添加到重定向意图中。
我的代码现在是:
1 2 3 4 | Intent intentRedirectionGPSSettings = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); intentRedirectionGPSSettings.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivityForResult(intentRedirectionGPSSettings, 0); |
我试着解释清楚。
manifest.xml中的标签"android:noHistory(true)"适用于活动,但标志FLAG_ACTIVITY_NO_HISTORY是一个很好的选择,因为它适用于意图。
谢谢你的帮助。
当您从调用逻辑调用它时,位置设置活动现在已成为您的应用程序/任务的一部分。就Android而言,这是应用程序变为非活动状态之前"你的"应用程序的最后一个屏幕。因此,当您再次返回应用程序时,它将自动返回到该活动。
这是正常且记录在案的行为。如果您不想在返回时使用Activty,请尝试调用"finishActivity()"...这仅适用于通过startActivityForResult()方法启动的那些活动。
在AndroidManifest中使用