锁定时从后台重新打开应用程序

时间:2014-04-24 20:22:35

标签: android android-intent android-wake-lock

我有以下代码来打开应用程序,一旦解锁,它会在前台显示我的应用程序。 这是代码:

if (AppStatus.isActivityVisible() == false) {
    PowerManager pm = (PowerManager) mActivity
        .getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP
            | PowerManager.FULL_WAKE_LOCK, "SipManager");
    wl.acquire();
    try {
        Intent it = new Intent("intent.my.action");
        it.setComponent(new ComponentName(mActivity.getPackageName(),
            MainActivity.class.getName()));
        it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mActivity.getApplicationContext().startActivity(it);
    } finally {
        wl.release();
    }
}

这适用于我,但它开始了一项新活动。我FLAG_ACTIVITY_NEW_TASK的原因是因为当我使用FLAG_ACTIVITY_REORDER_TO_FRONT之类的内容时会抛出此错误:

  

从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

如果活动在后台,或者在应用程序关闭时开始新活动,是否有办法将活动拉到前面?

我尝试添加setAction(Intent.ACTION_MAIN);addCategory(Intent.CATEGORY_LAUNCHER);,但没有成功。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您还需要更多的东西:

在manifest.xml中,确保设置活动launchMode

   <activity
        android:name="com.att.attbusiness.PlanDetailsActivity"
        android:launchMode="singleTop">
    </activity>

然后,当你想从堆栈中获取活动或开始一个新活动时:

Intent i = new Intent(mContext, PlanDetailsActivity.class);
Bundle bundle = new Bundle();
i.putExtras(bundle);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

您可能还需要覆盖OnNewIntent()

   @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Bundle extras = getIntent().getExtras();
    ...

}