【问题标题】:Launch back into my activity after waiting for an event等待事件后重新启动我的活动
【发布时间】:2014-01-21 20:09:21
【问题描述】:

在 Android 上,我正在尝试设计一个活动,引导用户完成一些系统设置更改。我知道如何检测设置是否启用,我会将该检查放入后台线程中的循环中,它会正确检测用户何时进行更改。我希望我的活动在更改发生时自动弹回前台。我在那里有一个 startActivity 调用,但它不起作用。

final Thread mSettingCheck = new Thread() {
    @Override
    public void run() {
        try {
            for (int i = 0; i < 600; i++) {
                if (WizardUtils.isSettingChecked()) {
                    Handler handler = new Handler(Looper.getMainLooper());
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                        Intent intent = new Intent(getApplicationContext(), WizardActivity.class);
                        startActivity(intent);
                        }
                    }); 
                    Log.i("tag", "yay!");
                    break;
                }
                sleep(500);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

我得到日志输出行说“耶”,所以我知道它正在检测,但我没有看到活动启动到前台。有谁知道我做错了什么?

【问题讨论】:

  • 我不明白,你正在尝试从WizardActivity 运行WizardActivity ?new Intent(WizardActivity.this, WizardActivity.class); 对吗?
  • 我希望用户在 WizardActivity 上启动,它会有一些指示去系统设置以选中一个框。在后台线程中,我希望我的活动轮询设置更改,当检查设置时,我想将用户带回 WizardActivity 以继续下一步。
  • 我把它改成了 Intent(getApplicationContext(), WizardActivity.class) 让它更清晰。
  • 您想将用户从“系统设置”带到您的活动中吗?
  • 是的。我想将用户从系统设置带到我的活动

标签: android background android-activity


【解决方案1】:

这里的解决方法是使用 Pending Intent。

private void returnToWizard() {
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent("android.intent.category.LAUNCHER");
            intent.setClassName("package name", "activity name");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            PendingIntent i2 = PendingIntent.getActivity(getApplicationContext(), 0, intent,
                    Intent.FLAG_ACTIVITY_NEW_TASK);
            try {
                i2.send(getApplicationContext(), 0, intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多