手机开机时未接收到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();
        }

    }
}