关于android:重定向到设置菜单后停止意图

Stop an intent after a redirection to setting menu

我目前正在开发一款在googleMaps视图中使用GPS定位的应用。 我检查GPS功能是否被激活,如果没有,我将用户重定向到设置菜单。

  • 如果我点击后退按钮(通过激活或不激活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中使用android:launchMode="singleTask"