手机开机时未接收到Android启动完成
有很多这样的答案,但我仍然没有得到我想要的解决方案 该文件是清单文件手机开机时未接收到Android启动完成,android,service,broadcastreceiver,bootcompleted,Android,Service,Broadcastreceiver,Bootcompleted,有很多这样的答案,但我仍然没有得到我想要的解决方案 该文件是清单文件 <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service android:name=".MyService" />
<receiver
android:name=".RestartService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
这个类在服务类内部
class TimeDisplayTimerTask extends TimerTask {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
Timer();
}
});
}
}
这是广播课
public class RestartService extends BroadcastReceiver {
MyService myService;
MyService.TimeDisplayTimerTask timeDisplayTimerTask;
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
context.startService(new Intent(context,MyService.class));
myService.getPackagesList("package_names");
myService.getTimer("SELECTED_TIME");
myService.Timer();
timeDisplayTimerTask.run();
Toast.makeText(context,"Restarted",Toast.LENGTH_LONG).show();
}
}
}
如果您能提供任何帮助,我将不胜感激。您的BroadcastReceiver类已中断。您永远不能拥有服务的实例。在您自己的代码中,它从未初始化,它只会导致NullPointerException。所以你很可能会得到一个,然后崩溃。你不需要服务来做这件事,你实际上可以在广播中做。
我正在使用kotlin,我只是调用另一个函数来完成这项工作,但它都在我的广播中。我现在要做什么,你能帮我吗?我知道我的代码不正确,但是我没有得到任何其他的解决方案,即使是我没有得到的吐司信息。因为在你得到吐司之前你已经崩溃了。删除对myService的所有引用,它们将不起作用。我甚至不能告诉你如何修复它,因为我不知道你想做什么。但我可以告诉你,像你正在尝试的那样通过重启让服务无限运行在许多版本的Android上是行不通的。这与谷歌为节省电池寿命所做的一切背道而驰,你需要找到另一种方法。现在,我可以在删除服务类后获得Toast消息。我正在尝试构建一个使用计时器而不是密码的AppLock,我想继续运行带有倒计时功能的服务类,所以现在当我关闭手机并再次打开该服务时,该服务将停止。但我想重新启动该服务again@ismail这是你在安卓系统中无法可靠做到的。故意这样做。找到另一种方法去做你真正想做的事情,而不需要长期服务。你是什么意思,兄弟?
public class RestartService extends BroadcastReceiver {
MyService myService;
MyService.TimeDisplayTimerTask timeDisplayTimerTask;
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
context.startService(new Intent(context,MyService.class));
myService.getPackagesList("package_names");
myService.getTimer("SELECTED_TIME");
myService.Timer();
timeDisplayTimerTask.run();
Toast.makeText(context,"Restarted",Toast.LENGTH_LONG).show();
}
}
}