广播接收器不会被BOOT_COMPLETED意图触发

时间:2018-09-11 05:54:55

标签: java android

我已经创建了BroadcastReceiver类,但是它不是由我的意图触发的。在清单文件中注册了BroadcastReceived和intent关系,但看来我做错了。我的代码设置不正确吗?在手机启动时启动BOOT意图还是在应用启动时触发?

广播接收的类:

public class NetworkSchedulerReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("receiver","test receiver"); // ----------> this doesn't log :(

        JobInfo networkJob = new JobInfo.Builder(0, new ComponentName(context, NetworkSchedulerService.class))
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .setPersisted(true)
                .build();

        JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        scheduler.schedule(networkJob);
    }
}

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hmexperiment">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:allowBackup="false"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
          android:launchMode="singleTop"
          android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
          <intent-filter>
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
              <category android:name="android.intent.category.BROWSABLE" />
              <data
                  android:host="ecobee.auth0.com"
                  android:pathPrefix="/android/${applicationId}/callback"
                  android:scheme="${applicationId}" />
          </intent-filter>
      </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
      <service android:name=".NetworkSchedulerService" android:permission="android.permission.BIND_JOB_SERVICE" />
      <receiver android:name=".NetworkSchedulerReceiver">
          <intent-filter>
              <action android:name="android.intent.action.BOOT_COMPLETED" />
          </intent-filter>
      </receiver>
    </application>

</manifest>

1 个答案:

答案 0 :(得分:0)

我已经通过下面提到的方式做到了。

首先创建广播接收器类。

class BroadcastReceiverOnBootComplete: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
    if (intent?.action.equals(Intent.ACTION_BOOT_COMPLETED, ignoreCase = true)) {

       // Do something here.
      }
   }
 }

像这样在您的AndroidManifeast文件中注册接收器

 <receiver
        android:name=".receiver.BroadcastReceiverOnBootComplete"
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REPLACED" />
            <data android:scheme="package" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>

希望有帮助。