推送是每一個APP必不可少的一部分,這幾天正好在做這一塊值桩,所以總結一下遇到的一些問題摆霉。在APP被殺死的情況下,對應的推送service也一起被殺死了,這個時候我們怎么能夠收到后臺的推送呢?
解決辦法很簡單嵌溢,但是也特別粗暴,在mainfest中給application設置這個屬性android:persistent="true"刻两,看意思我們就知道增蹭,持續(xù)的滴某,一直的,這樣的話滋迈,app是殺不死的霎奢,推送肯定有可以收到了。但是強烈建議不要這樣做饼灿,因為這樣就像某些流氓軟件一樣了幕侠,畢竟我們做個應用出來,也不想讓別人以為我們的是流氓軟件吧碍彭。好了晤硕,重頭戲來了,最后一種方法庇忌,也是我比較推薦的一種舞箍。用Broadcast Receivers。我們都知道皆疹,推送實際上應用的就是廣播疏橄,這里我們自定義一個廣播接收器,讓它繼承系統(tǒng)的Broadcast Receivers略就,然后復寫它的onReceive方法捎迫,在onReceive里面開啟推送的服務。最后在mainfest中去注冊我們自定義的廣播接收器表牢。這里一定要用靜態(tài)注冊的廣播接收器窄绒。如果是動態(tài)注冊的,APP被殺死后崔兴,廣播接收器也會被殺死彰导。下面我已極光推送為例浊闪。
//自定義的接收器
public class BoardcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent pushintent=new Intent(context,PushService.class);//啟動極光推送的服務
context.startService(pushintent);
}
}
//靜態(tài)注冊接收器
<receiver
android:name="BoardcastReceiver"
android:enabled="true">
<intent-filter>
<!--Required 用戶注冊SDK的intent-->
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<!--Required 用戶接收SDK消息的intent-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<!--Required 用戶接收SDK通知欄信息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<!--Required 用戶打開自定義通知欄的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<!-- 接收網絡變化 連接/斷開 since 1.6.3 -->
<action android:name="cn.jpush.android.intent.CONNECTION" />
<action android:name="android.intent.action.BOOT_COMPLETED"/><!--開機廣播-->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/><!--網絡狀態(tài)改變廣播-->
<category android:name="com.woman.RCTest" />
</intent-filter>
</receiver>