2016-09-18 7 views
1

Я использовал это разрешение:Android После перезагрузки Broadcast Reciver не работает

<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; 
     } 
    } 
} 

После перезагрузки он все еще не вызван в леденец, но на зефире он работает.

ответ

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

0

Всякий раз, когда загрузка платформы завершена, транслируется намерение с действием 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); 
    } 
} 

Поскольку мы начинаем службу, он тоже должен быть упомянут в AndroidManifest:

<service android:name=".LocationService"> 
    <intent-filter> 
     <action android:name="com.bootservice.test.DataService"/> 
    </intent-filter> 
</service> 
Смежные вопросы