簡體   English   中英

廣播接收器不會被BOOT_COMPLETED意圖觸發

[英]Broadcast Receiver doesn't get triggered by the BOOT_COMPLETED intent

我已經創建了BroadcastReceiver類,但是它不是由我的意圖觸發的。 在清單文件中注冊了BroadcastReceived和intent關系,但看來我做錯了。 我的代碼設置不正確嗎? 手機啟動時會觸發BOOT意圖嗎,還是應用程序啟動時會觸發?

BroadcastReceived類:

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>

我已經通過下面提到的方式做到了。

首先創建您的廣播接收器類。

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>

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM