从服务开始活动 - 肯定(Android)

时间:2011-02-28 10:28:10

标签: android service android-activity background standby

我正在尝试从服务开始活动数天。这不是那么难!我想要的只是:

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)显示此活动,当根活动位于顶部时,通过后退按钮销毁根活动,同时通过主页按钮暂停根活动

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

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

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

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

机器人:名称= “activities.MyDialogActivity” 机器人:noHistory = “真” 机器人:excludeFromRecents = “真”

但无论我在做什么,我都无法实现2)和3)。有人能帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

我的问题是因为我使用的是Application Context(this.getApplicationContext())。一旦我改为“这个”就行了。

此代码适用于我:

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;
    ...
}