2013-03-14 41 views
3

Here's我的問題:阻止Android的BootReceiver從開始主要活動

我的Android應用程序註冊一個引導接收器,其初始化PushNotification-經理(PushWoosh)。 這是因爲即使重啓設備後,用戶也應該能夠接收推送通知,而無需手動啓動應用程序。

這會起作用,但是當設備重新啓動時,應用程序的主要活動(MainMenuActivity)將啓動並被帶到前臺,這不應該發生。

Here's所涉及的代碼:

的AndroidManifest.xml:

<!-- Re-register PushManagers after reboot --> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

<application 
android:allowBackup="true" 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" 
android:theme="@android:style/Theme.Black.NoTitleBar"> 

<!-- PushWoosh --> 
<activity android:name="com.arellomobile.android.push.PushWebview"/> 
<activity android:name="com.arellomobile.android.push.MessageActivity"/> 
<activity android:name="com.arellomobile.android.push.PushHandlerActivity"/> 

<!-- PushWoosh --> 
<receiver 
    android:name="com.google.android.gcm.GCMBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND"> 

    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> 
     <category android:name="de.myapp.android"/> 
    </intent-filter> 
</receiver> 

<!-- PushWoosh --> 
<service android:name="com.arellomobile.android.push.PushGCMIntentService"/> 

<!-- Boot-Receiever --> 
<receiver android:name="de.myapp.android.startup.BootCompleteReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    </intent-filter> 
</receiver> 

<activity 
    android:name="de.myapp.android.activity.MainMenuActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:label="@string/app_name" 
    android:launchMode="singleTop" 
    android:screenOrientation="portrait" 
    android:windowSoftInputMode="adjustPan"> 

    <intent-filter> 
     <!-- Starten bei Klick auf Launcher Icon --> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 

    <intent-filter> 
     <!-- Starten bei Erhalt einer Push Notification --> 
     <action android:name="de.myapp.android.MESSAGE"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
    </intent-filter> 

</activity> 

BootCompleteReceiver.java:

public class BootCompleteReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent i) { 
     PushWooshHelper.setupPushNotifications(context.getApplicationContext()); 
    } 

} 

PushWooshHelper.java:

public class PushWooshHelper { 

    public static void setupPushNotifications(Context context) { 
     PushManager pushManager = new PushManager(context, AppIDs.PUSHWOOSH_APP_ID, AppIDs.GCM_PROJECT_ID); 
     pushManager.onStartup(context); 
     pushManager.startTrackingGeoPushes(); 
    } 

} 

MainMenuActivity。 Java的:

public class MainMenuActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
    } 


    private void checkMessage(Intent intent) { 

     if (intent != null) { 

      String log = "PUSH NOTIFICATION RECEIVED."; 

      if (intent.hasExtra(PushManager.PUSH_RECEIVE_EVENT)) { 
       log += "message: " + intent.getExtras().getString(PushManager.PUSH_RECEIVE_EVENT); 
      } 
      else if (intent.hasExtra(PushManager.REGISTER_EVENT)) { 
       log += "<register>"; 
      } 
      else if (intent.hasExtra(PushManager.UNREGISTER_EVENT)) { 
       log += "<unregister>"; 
      } 
      else if (intent.hasExtra(PushManager.REGISTER_ERROR_EVENT)) { 
       log += "<register error>"; 
      } 
      else if (intent.hasExtra(PushManager.UNREGISTER_ERROR_EVENT)) { 
       log += "<unregister error>"; 
      } 
     } 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 

     super.onNewIntent(intent); 

     setIntent(intent); 
     checkMessage(intent); 

     setIntent(new Intent()); 
    } 
} 

請注意:我沒有獲得PushManager.onStartup(),因爲它是由PushWoosh提供。

任何幫助,非常感謝!

+0

什麼是'de.myapp.android.MESSAGE'? – StarPinkER 2013-03-15 08:13:37

回答

0

這很奇怪。 Pushwoosh使用GCM,它在開箱後重啓設備後工作。您只需註冊一次推送通知,然後在重新啓動GCM後自行處理。

+0

你說得對。我實現了啓動接收器,因爲推送通知在重新啓動後不起作用。但是這是由於另一個錯誤,所以在正確設置時,實際上不需要手動在每次啓動時實例化PushManager。 – 2013-03-15 08:29:25