Android BroadcastReceiver未收到BOOT_COMPLETED事件

时间:2017-04-30 18:45:22

标签: java android android-studio broadcastreceiver

我在我的应用程序中创建了一个 BroadcastReceiver 来接收 BOOT_COMPLETED事件(BootReceiver)然后启动服务(NtService)此服务有一个公共静态布尔值(started),通过他的onCreate()方法设置为true但是当我在MainActivity中将var打印到控制台,布尔值仍然是假的。

该应用程序安装在内部存储中,我在android工作室模拟器中通过在adb shell上提交此命令来调试它:

am broadcast -a android.intent.action.BOOT_COMPLETED

以下是代码:

BootReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
            Intent i = new Intent(context, NtService.class);
            context.startActivity(i);
    }
}

NtService

   import android.app.Service;
   import android.content.Intent;
   import android.os.IBinder;

   public class NtService extends Service {
     public static boolean started;

     public NtService() {
     }

     @Override
     public IBinder onBind(Intent intent) {
         return null;
     }

     public void onCreate(){
         started=true;
     }
   }

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.primerdime.cloudchat">
    <!-- PERMISSION -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application
        android:allowBackup="false"
        android:icon="@drawable/icon"
        android:installLocation="internalOnly"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
            <activity
                android:name=".MainActivity"
                android:windowSoftInputMode="adjustResize">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".registration" />
            <!-- SERVICE AND RECEIVER -->
            <service
                android:name=".NtService"
                android:enabled="true"
                android:exported="false" />

            <receiver
                android:name=".BootReceiver"
                android:enabled="true"
                android:exported="false">
                <intent-filter>
                    <action android:name="android.intent.action._BOOT_COMPLETED" />
                </intent-filter>
            </receiver>

    </application>
</manifest>

1 个答案:

答案 0 :(得分:1)

android:exported="false"元素中删除<receiver>。就目前而言,它无法从应用程序外部接收广播。

此外,您在<action>元素中有拼写错误。它应该是<action android:name="android.intent.action.BOOT_COMPLETED" />

最后,将context.startActivity(i);替换为context.startService(i);,因为您正在尝试启动服务,而不是活动。