以下是该方案:
AndroidManifest.xml使用android:launchMode="singleTask"
定义单个活动。 (这意味着在整个应用程序生命周期中堆栈中应该有一个活动,对吗?)
在Activity.onCreate()
期间,以编程方式创建广播接收器并侦听发送短信。即使在设计Activity.onPause()
之后,接收器仍然有效。。
当用户完成应用程序后,他按下设备主页按钮,该按钮调用Activity.onPause()
并且应用程序消失。然后设备显示Android主屏幕。
收到短信后,广播接收器会收到短信并尝试通过以下方式显示活动:
Intent it = new Intent(context, Akami.class);
it.setAction(Intent.ACTION_MAIN);
it.addCategory(Intent.CATEGORY_LAUNCHER);
it.setComponent(new ComponentName(context.getPackageName(), "MyActivity"));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(it);
但是,该活动不会显示给用户。
答案 0 :(得分:18)
在MyMainActivity
定义(AndroidManifest.xml)中:
<intent-filter>
<action android:name="intent.my.action" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
以编程方式将应用程序带到前台:
Intent it = new Intent("intent.my.action");
it.setComponent(new ComponentName(context.getPackageName(), MyMainActivity.class.getName()));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(it);
注意:当context.startActivity(it)
对象与想要提出的活动相同时,context
将无效。
答案 1 :(得分:1)
是的,你所说的是正确的,有一个BroadcastReciever并向你的Activity发出一个意图将它带到前台。但是关于活动生命周期的注意事项。
Android操作系统可以根据系统资源将您的活动从onPause()转移到onStop()和onDestroy()。所以在这种情况下,你的调用Activity会再次重启,所以在那里采取预防措施。否则,很容易遇到NullPointerExceptions