2015-04-15 4 views
0

Как я могу инициировать свой BroadcastReceiver всякий раз, когда пользовательский телефон был перезапущен. и если пользователь убьет приложение, может ли BroadcastReceiver работать на заднем плане?Android, как инициировать BroadcastReceiver при перезапуске телефона

Я создал ParsePushBroadcastReceiver, которые получают push-уведомление от parse.com. но мое приложение получит уведомление только в том случае, если пользователь открывает приложение.

public class MyParseReceiver extends ParsePushBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     Log.i(TAG, "onReceive Called"); 

     if (intent == null) { 
      Log.e(TAG, "Receiver intent null"); 
     } 
     else { 
      // Parse push message and handle accordingly 
      Log.d(TAG, "Receiver intent data => " + intent.toString()); 
     } 

    }//end onReceive 



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

Мой манифест:

<activity 
     android:name=".SplashActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

<service android:name="com.parse.PushService" /> 

<receiver android:name="com.parse.ParseBroadcastReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.RECEIVE_BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.USER_PRESENT" /> 
    </intent-filter> 
</receiver> 

<receiver 
    android:name="com.my.app.core.MyParseReceiver" 
    android:exported="false" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.USER_PRESENT" /> 
     <action android:name="com.parse.push.intent.RECEIVE" /> 
     <action android:name="com.parse.push.intent.DELETE" /> 
     <action android:name="com.parse.push.intent.OPEN" /> 
    </intent-filter> 
</receiver> 
<receiver 
    android:name="com.parse.GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.RECEIVE_BOOT_COMPLETED" /> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

     <category android:name="com.my.app" /> 
    </intent-filter> 
</receiver> 

<meta-data 
    android:name="com.parse.push.notification_icon" 
    android:resource="@drawable/ic_launcher" /> 

ответ

1

Q: Как я могу начать свой BroadcastReceiver всякий раз, когда был перезапущен пользователь телефона. и если пользователь убьет приложение, может ли BroadcastReceiver работать на заднем плане?
A: Да, может.
Если вы хотите внедрить BroadcastReceiver (push-уведомления) в свое приложение, вы должны использовать Google Cloud Message с последним GCM вместо старого C2DM.
Эта служба использует Службу Google Play, поэтому вам не нужно запускать приложение, потому что оно основано на Службе Google Play, которое является сервисом на вашем Android-телефоне.
Пожалуйста, обратитесь: https://developer.android.com/google/gcm/index.html
Пример: https://github.com/google/gcm

1

Не могли бы вы, пожалуйста, попробуйте установить android:exported="true" для вашего приемника тега в манифесте

Смежные вопросы