如何在启动时启动我的应用程序?

我试过在这个链接中使用示例代码,但似乎过时了,并没有工作。 那么,我必须做什么改变,以及什么文件让我的应用程序自动启动时,Android完成启动?

首先,您需要AndroidManifest.xml的权限:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

另外,在您的AndroidManifest.xml ,定义您的服务并监听BOOT_COMPLETED操作:

 <service android:name=".MyService" android:label="My Service"> <intent-filter> <action android:name="com.myapp.MyService" /> </intent-filter> </service> <receiver android:name=".receiver.StartMyServiceAtBootReceiver" android:label="StartMyServiceAtBootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 

然后,您需要定义将获得BOOT_COMPLETED操作并启动您的服务的接收器。

 public class StartMyServiceAtBootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { Intent serviceIntent = new Intent(context, MyService.class); context.startService(serviceIntent); } } } 

现在你的服务应该在手机启动时运行。

这是如何使一个活动开始在Android设备重新启动后运行:

将这段代码插入到你的AndroidManifest.xml文件中,在<application>元素中( 不在 <activity>元素中):

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <receiver android:enabled="true" android:exported="true" android:name="yourpackage.yourActivityRunOnStartup" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> 

然后创build一个新的类yourActivityRunOnStartup (与清单中<receiver>元素指定的android:name匹配):

 package yourpackage; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class yourActivityRunOnStartup extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent i = new Intent(context, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } } 

注意:调用i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 非常重要,因为这项活动是从活动外的背景下发起的。 没有这个,活动将不会开始。

而且, <receiver>标签中的android:enabledandroid:exportedandroid:permission似乎不是强制性的。 应用程序收到没有这些值的事件。 看到这里的例子。

听ACTION_BOOT_COMPLETE并从那里做你所需要的。 这里有一个代码片段 。

更新:

原始链接的答案是closures的,所以基于评论,这里是链接的代码,因为没有人会错过代码时链接closures。

在AndroidManifest.xml(应用程序部分)中:

 <receiver android:enabled="true" android:name=".BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> 

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

 public class BootUpReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, MyActivity.class); //MyActivity can be anything which you want to start on bootup... i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } 

来源: https : //web.archive.org/web/20150520124552/http : //www.androidsnippets.com/autostart-an-application-at-bootup

另外,如果您不想修改代码,则可以使用像AutoStart这样的应用程序,以便在启动时启动Android应用程序: https : //play.google.com/store/apps/details?id = com.autostart

Sean的解决scheme最初并不适用于我(Android 4.2.2)。 我必须为同一个Android项目添加一个虚拟活动,并至less在设备上手动运行一次活动。 然后,肖恩的解决scheme开始工作,并在接下来的重新启动后通知BroadcastReceiver。

另一种方法是使用android.intent.action.USER_PRESENT而不是android.intent.action.BOOT_COMPLETED来避免启动过程中的缓慢下降。 但是,只有当用户启用了locking屏幕时才是如此 – 否则这个意图不会被广播。

https://funwithdc.wordpress.com/2012/02/12/the-problem-with-androids-action_user_present-intent/

截图

我想在这个问题上补充一点,这个问题我是在这几天面对的。 我尝试了所有的答案,但这些都不适合我。 如果您使用的是Android 5.1版本,请更改这些设置。

如果您使用的是Android 5.1版,那么您必须从应用程序设置中取消select(限制为启动)。

设置>应用>你的应用>限制发射(取消select)