【问题标题】:Android After Reboot Broadcast Receiver is not runningAndroid 重启后广播接收器未运行
【发布时间】:2016-09-18 07:57:13
【问题描述】:

我使用了这个权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

而接收者是:

<receiver android:name=".auth.NotificationBroadcast" android:enabled="true" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

代码中的接收者是:

@Override
    public void onReceive(Context context, Intent intent) {

        System.out.println("BroadcastReceiverBroadcast--------------------ReceiverBroadcastReceiverBroadcastReceiver----------------BroadcastReceiver");

        if (intent != null) {
            String action = intent.getAction();

        switch (action) {
            case Intent.ACTION_BOOT_COMPLETED:
                System.out.println("Called on REBOOT");
                // start a new service and repeat using alarm manager

                break;
            default:
                break;
        }
    }
}

重启后它仍然没有在棒棒糖中被调用,但在棉花糖上它正在运行。

【问题讨论】:

    标签: android service alarmmanager android-reboot


    【解决方案1】:

    尝试将此行放入接收者的意图过滤器中。

    <action android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" />
    

    如果您的应用程序安装在 SD 卡上,您应该注册它以获取 android.intent.action.BOOT_COMPLETED 事件。

    更新:由于您的应用正在使用警报服务,因此不应将其安装在外部存储上。参考:http://developer.android.com/guide/topics/data/install-location.html

    【讨论】:

      【解决方案2】:

      只要平台启动完成,就会广播一个带有 android.intent.action.BOOT_COMPLETED 动作的意图。您需要注册您的应用程序才能接收此意图。要注册,请将其添加到您的 AndroidManifest.xml

      <receiver android:name=".ServiceManager">
                  <intent-filter>
                      <action android:name="android.intent.action.BOOT_COMPLETED" />
                  </intent-filter>
      </receiver>
      

      因此,您将使用 ServiceManager 作为广播接收器来接收启动事件的意图。 ServiceManager 类如下:

      public class ServiceManager extends BroadcastReceiver {
      
          Context mContext;
          private final String BOOT_ACTION = "android.intent.action.BOOT_COMPLETED";
      
          @Override
          public void onReceive(Context context, Intent intent) {
                      // All registered broadcasts are received by this
              mContext = context;
              String action = intent.getAction();
              if (action.equalsIgnoreCase(BOOT_ACTION)) {
                              //check for boot complete event & start your service
                  startService();
              } 
      
          }
      
      
          private void startService() {
                      //here, you will start your service
              Intent mServiceIntent = new Intent();
              mServiceIntent.setAction("com.bootservice.test.DataService");
              mContext.startService(mServiceIntent);
          }
      }
      

      既然要启动Service,AndroidManifest中也必须提到:

      <service android:name=".LocationService">
          <intent-filter>
              <action android:name="com.bootservice.test.DataService"/>
          </intent-filter>
      </service>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多