Sha*_*awn 9 android broadcastreceiver android-intent android-activity
我希望广播接收器以这种方式启动我的应用程序:
如果应用程序不在前台或后台,请将其启动,就好像它是从启动器启动一样.
如果应用程序在后台,请将其带到最后一个状态的前台.
如果应用程序位于前台,则不执行任何操作.
这是我的代码:
@Override
public void onReceive(Context context, Intent intent) {
Intent launch_intent = new Intent("android.intent.action.MAIN");
launch_intent.setComponent(new ComponentName("com.example.helloworld","com.example.helloworld.MainActivity"));
launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
launch_intent.addCategory(Intent.CATEGORY_LAUNCHER);
launch_intent.putExtra("some_data", "value");
context.startActivity(launch_intent);
}
Run Code Online (Sandbox Code Playgroud)
MainActivity是我的根活动.就像我说的,如果应用程序已经运行,我只是想把它带到前面而不改变它的状态.如果在MainActivity之上有一些活动,请保持原样.
大多数情况下上面的代码工作正常,但有时我注意到应用程序重新启动(或状态被重置 - 根回到顶部)当它从后台运行时.
我应该使用什么代码?任何帮助表示赞赏!
您不需要编写所有代码.您可以使用"启动Intent",如下所示:
PackageManager pm = context.getPackageManager();
Intent launchIntent = pm.getLaunchIntentForPackage("com.example.helloworld");
launchIntent.putExtra("some_data", "value");
context.startActivity(launchIntent);
Run Code Online (Sandbox Code Playgroud)
但是,您的代码也应该有效.
如果你说大部分时间都可以使用,那么在这些情况下你可能会看到一个令人讨厌的旧Android漏洞.当您第一次直接从安装程序或通过IDE(Eclipse,Android Studio等)启动应用程序时,会发生这种情况.您应该首次直接从HOME屏幕或已安装的应用列表启动您的应用.有关这个令人沮丧的Android错误的更多信息,请参阅/sf/answers/1151325591/
因为你需要像这样的行为
1) 如果应用程序不在前台或后台,请像从启动器启动一样启动它。
2) 如果应用程序在后台,将它以上次所处的状态带到前台。
3) 如果应用程序在前台,什么都不做。
考虑:
@Override
public void onReceive(Context context, Intent intent) {
Intent startIntent = context
.getPackageManager()
.getLaunchIntentForPackage(context.getPackageName());
startIntent.setFlags(
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT |
Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
);
context.startActivity(startIntent);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14010 次 |
| 最近记录: |