Answers:
首先,您需要在中获得许可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);
}
}
}
现在,您的服务应该在手机启动时正在运行。
Intent.ACTION_BOOT_COMPLETED
而不是在Receiver中对字符串进行硬编码。另外,Intent(context, MySystemService.class)
在创建Intent 时应使用新的构造函数。
Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own file
上public class
线了。有任何想法吗?
这是在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>
然后创建一个新类yourActivityRunOnStartup
(与清单中元素的android:name
指定匹配<receiver>
):
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);
很重要,因为活动是从活动外部的上下文启动的。没有这个,活动将不会开始。
此外,价值观android:enabled
,android:exported
并android:permission
在<receiver>
标签似乎并没有强制性。该应用接收的事件没有这些值。请参阅此处的示例。
Application
?也许在onCreate()
?
onReceive()
一个的BroadcastReceiver
收听ACTION_BOOT_COMPLETE,然后从那里开始您需要做的事情。这里有一个代码段。
更新:
答案的原始链接已断开,因此基于注释,此处为链接代码,因为当链接断开时,没人会错过该代码。
在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应用:AutoStart-No root
我想在这个问题上补充我几天要面对的观点。我尝试了所有答案,但这些都不适合我。如果您使用的是Android 5.1版,请更改这些设置。
如果您使用的是Android 5.1版,则必须从应用设置中取消选择(限制启动)。
设置>应用>您的应用>限制启动(取消选择)
另一种方法是在引导过程中使用android.intent.action.USER_PRESENT
而不是android.intent.action.BOOT_COMPLETED
避免速度变慢。但这仅true
在用户启用了锁定屏幕的情况下-否则就不会广播此意图。