【问题标题】:onActivityResult for Intent(Settings.ACTION_SETTINGS) called immediately立即调用 Intent(Settings.ACTION_SETTINGS) 的 onActivityResult
【发布时间】:2014-05-13 16:36:23
【问题描述】:

在我的初始屏幕中,我向服务器发出了请求,但是当没有互联网连接时,我正在打开

Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
startActivityForResult(settingsIntent, REQUEST_ENABLE_CONNECTION);

但问题是onActivityResult 立即使用 requestCode = REQUEST_ENABLE_CONNECTION 调用

我还尝试为意图添加标志 FLAG_NEW_TASK,但没有成功。

活动不是singleTopsingleInstancemanifest

解决此问题的最佳安卓解决方案是什么?我不想使用广播,因为它不是我的流程的最佳方式,所以它将被视为我的最后选择。

非常感谢您的帮助。

【问题讨论】:

  • onActivityResult 中得到什么结果代码? RESULT_CANCELLED 还是其他?
  • RESULT_CANCELED 但这并不重要,因为 onActivityResult 被调用了,当返回应用程序时,它不再调用了

标签: android android-intent start-activity onactivityresult


【解决方案1】:

将此添加到您的意图中:

 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

【讨论】:

    【解决方案2】:

    我找到了解决方法:在我的意图中

    activity.startActivityForResult(intent,REQUEST_SYSTEM_WRITE_PERMISSION);
    testDelaydRingtoneSetting(mUri, mCallback);
    

    这里有诀窍:

    private void testDelaydRingtoneSetting(Uri mUri, KrollFunction mCallback) {
            final Uri ringtoneUri = mUri;
            final KrollFunction callback = mCallback;
            final Context context = TiApplication.getInstance().getApplicationContext();
            new android.os.Handler().postDelayed(new Runnable() {
            public void run() {
                if (Settings.System.canWrite(context)) {
                    Activity activity = TiApplication.getInstance()
                            .getCurrentActivity();
                    activity.finishActivity(REQUEST_SYSTEM_WRITE_PERMISSION);
                    setRingtone(ringtoneUri, callback);
                } else
                    testDelaydRingtoneSetting(ringtoneUri, callback);
            }
        }, 1000);
    }
    

    【讨论】:

      【解决方案3】:

      如果onActivityForResult 不适合您(正如@CommonsWare 建议的那样,这很好),您可以创建一个应该可以正常工作的简单流程:

      在你的活动中,添加

      private boolean isReturnedFromSettings = false;
      

      当您决定没有互联网连接并想要打开设置活动时,请使用startActivity 并设置isReturnedFromSettings = true;

      在 Activity 的 onResume 中添加:

      if (isReturnedFromSettings) {
      isReturnedFromSettings = false;
      
      //DO WHATEVER
      }
      

      应该可以...

      【讨论】:

      • 此标志需要在onSaveInstanceStateonRestoreInstanceState 中维护,因为如果系统在设置屏幕打开时杀死您的Activity,您可能会丢失它。
      【解决方案4】:

      解决此问题的最佳安卓解决方案是什么?

      没有问题。设置应用程序的活动没有记录以支持startActivityForResult(),主要活动 (Settings.ACTION_SETTINGS) 根本不提供它。

      【讨论】:

        【解决方案5】:

        请试试这个。 Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS); startActivity(settingsIntent);

        【讨论】:

        • 我需要以适当的方式返回我的活动以询问设备是否有连接,这对我来说一点都不好。
        • wt 是什么意思? ...请解释你为什么不这样做。可以在Activity的onResume方法中查看(设备有连接)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2012-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多