2

我只是想从服务开始几天的活动。这不可能那么难!我想要的是这个:

1)从后台服务启动一个活动(由AlarmManager安排)。目前我正在使用此代码执行此操作

Intent i = new Intent(this, MyDialogActivity.class);
i.putExtra(MyDialogActivity.TEXT, myObject.getText());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

2) 显示此 Activity,无论根 Activity 在顶部,根 Activity 是否通过后退按钮被销毁,根 Activity 是否通过 Home 按钮暂停

3)无论设备是否处于待机状态都显示此活动(应在用户从待机状态唤醒设备后显示活动)

4)确定销毁活动并在用户看到活动并按下按钮(包括主页和返回按钮)后发送广播。目前我正在使用此代码执行此操作(pm 是 PowerManager)

protected void onPause() {
    if (pm.isScreenOn()) {
        sendBroadcast(retValue);
        if (!isFinishing()) {
            finish();
        } else {
            moveTaskToBack(true);
        }
    } 
    super.onPause();
}

5)防止此活动可以从调用服务以外的其他点开始。目前我正在通过在 AndroidManifest 中设置此属性来执行此操作:

android:name=".activities.MyDialogActivity" android:noHistory="true" android:excludeFromRecents="true"

但无论我在做什么,我都无法意识到 2) 和 3)。有人可以帮助我吗?

谢谢!

4

1 回答 1

1

从服务开始活动时我遇到了同样的问题。我试图启动系统语音拨号器。

我的问题是因为我使用了应用程序上下文 (this.getApplicationContext()) 而引起的。一旦我更改为“this”,它就起作用了。

这段代码对我有用:

Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND);    
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

我在哪里获得上下文使用:

public void onCreate() {
    super.onCreate();
    Log.i(TAG, "Service created");
    context = this;
    ...
}
于 2012-04-16T17:09:51.747 回答