此代码将在启动系统后自动运行应用程序,但在按下后退按钮后应用程序将关闭。
如果应用程序通过单击它的图标正常运行。即使按下后退按钮或运行其他应用程序,它也会继续运行。
public class AutoBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
我的问题是,即使在按下后退按钮或运行其他应用程序后,如何让这个自动运行代码持续运行?
原文由 JBMagallanes 发布,翻译遵循 CC BY-SA 4.0 许可协议
无论如何,由于应用程序在后台运行,我假设您真正要问的是如何让应用程序在后台执行操作。下面的解决方案将使您的应用程序在打开应用程序后和系统重新启动后在后台执行操作。
下面,我添加了一个完整工作示例的链接(以 Android Studio 项目的形式)。
这个主题似乎超出了 Android 文档的范围,并且似乎没有任何关于此的全面文档。这些信息分布在几个文档中。
以下文档间接告诉您如何执行此操作:
https://developer.android.com/reference/android/app/Service.html
https://developer.android.com/reference/android/content/BroadcastReceiver.html
https://developer.android.com/guide/components/bound-services.html
为了使您的使用要求正确,请仔细阅读上述文档的重要部分:#Binder、#Messenger 和下面的组件链接:
https://developer.android.com/guide/components/aidl.html
这是一个完整工作示例的链接(Android Studio 格式):
https://developersfound.com/BackgroundServiceDemo.zip
该项目将启动一个
Activity
绑定到一个服务;实施 AIDL。这个项目对于跨不同应用程序的 IPC 进行重构也很有用。
此项目还开发为在 Android 重新启动时自动启动(前提是该应用在安装后已运行至少一个且应用未安装在 SD 卡上)。
当此应用程序/项目在重新启动后运行时,它会动态使用透明视图,使其看起来好像没有应用程序已启动,但相关应用程序的服务已干净启动。
这段代码的编写方式很容易调整以模拟预定服务。
该项目是根据上述文档开发的,随后是一个干净的解决方案。
然而,这个项目的一部分并不干净:我还没有找到一种方法来在不使用
Activity
的情况下启动服务。如果任何阅读这篇文章的人有一个干净的方法来做到这一点,请发表评论。