編輯:關於Android編程
最近這幾個月都是在准備找工作和找工作中,付出了很多,總算是有點收獲,所以都沒有怎麼整理筆記。到了最近才有空把自己的筆記整理一下發上來,分享一下我的學習經驗。
由於最近項目要用到Android的消息推送,關於Android推送的解決方案有很多種,有C2DM,輪詢, SMS,MQTT協議,XMPP協議和第三方平台,經過我們對項目需求的考慮之後我們選擇了第三方平台推送的小米推送,下面就是小米推送的實現方法。
想要用小米推送首先要去小米開發者平台注冊申請開發者賬號,經過1到3天的審核之後就會通過,然後就可以申請推送服務。申請一個App的推送服務之後,獲得AppID和AppKey就可以去學習它給Demo來使用了,下面我主要就是講一下我對Demo的理解。
推送的內容可以由後台服務端利用小米推送的SDK實現發送,也可以在小米的推送平台發送,發送的消息有兩種:通知消息和透傳信息。
就是會顯示在Android系統通知欄的消息,用戶點擊它的響應事件要自己實現或者在發送的時候說明點擊打開App。
即是透明傳送,即傳送網絡無論傳輸業務如何,只負責將需要傳送的業務傳送到目的節點,同時保證傳輸的質量即可,而不對傳輸的業務進行處理。就是直接把消息傳給App,不會自動在通知欄上顯示。
官方給出的Demo裡面簡單地為我們展示了一下小米推送的各種設置和怎樣實現接收推送。Demo首先把小米推送的SDK加入Library,然後裡面有4個java文件,如圖
第4個Dialog可以不用看,關鍵是DemoMessageReceiver這個廣播接收器,接收推送到的各種信息然後進行處理。還有那個DemoApplication和MainActivity就是用來實現接收到信息的顯示。
然後界面是這樣的(demo沒做屏幕適配,所以就那樣了):
一堆關於推送的配置,和一個顯示Log的TextView。主要為我們展示了小米推送的使用過程。
要實現小米推送的移動端接收,核心就是上面說到最主要的DemoMessageReceiver這個廣播接收器。這個繼承了小米SDK裡面的PushMessageReceiver類裡面,這個廣播接收器可以通過重寫下面這5個回調方法來實現對推送的處理。
@Override public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) { //用來接收服務器向客戶端發送的透傳消息,收到透傳消息會觸發。 } @Override public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) { //用來接收服務器向客戶端發送的通知消息,這個回調方法會在用戶手動點擊通知後觸發。 } @Override public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) { //用來接收服務器向客戶端發送的通知消息,這個回調方法是在通知消息到達客戶端時觸發。另外應用在前台時不彈出通知的通知消息到達客戶端也會觸發這個回調函數 } @Override public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) { //用來接收客戶端向服務器發送注冊命令後的響應結果 } @Override public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) { //用來接收客戶端向服務器發送命令後的響應結果。這裡可以收到到各種命令的返回結果,例如注冊服務、設置別名之類的結果,在這裡可以實現初始化錯誤然後重啟之類的功能。 }
這個Application類的主要功能有設置App的ID和KEY,還有在onCreate方法裡面注冊推送服務。
在這個Demo裡面,它還在裡面弄了一個Handler來讓廣播接收器可以使用它來發Toast和讓MainActivity打印Log在TextView上。
// user your appid the key. private static final String APP_ID = "1000270"; // user your appid the key. private static final String APP_KEY = "670100056270"; // 此TAG在adb logcat中檢索自己所需要的信息, 只需在命令行終端輸入 adb logcat | grep // com.xiaomi.mipushdemo public static final String TAG = "com.xiaomi.mipushdemo"; private static DemoHandler sHandler = null; private static MainActivity sMainActivity = null; @Override public void onCreate() { super.onCreate(); // 注冊push服務,注冊成功後會向DemoMessageReceiver發送廣播 // 可以從DemoMessageReceiver的onCommandResult方法中MiPushCommandMessage對象參數中獲取注冊信息 if (shouldInit()) { MiPushClient.registerPush(this, APP_ID, APP_KEY); } LoggerInterface newLogger = new LoggerInterface() { @Override public void setTag(String tag) { // ignore } @Override public void log(String content, Throwable t) { Log.d(TAG, content, t); } @Override public void log(String content) { Log.d(TAG, content); } }; Logger.setLogger(this, newLogger); if (sHandler == null) { sHandler = new DemoHandler(getApplicationContext()); } } private boolean shouldInit() { ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)); ListprocessInfos = am.getRunningAppProcesses(); String mainProcessName = getPackageName(); int myPid = Process.myPid(); for (RunningAppProcessInfo info : processInfos) { if (info.pid == myPid && mainProcessName.equals(info.processName)) { return true; } } return false; }
Demo裡面的MainActivity主要是實現界面的那些按鈕的處理,借此來告訴我們怎樣設置本地的推送方案,具體的設置有
不過暫停和恢復底層上的實現其實還是調用設置推送時間為00:00 - 00:00和00:00 - 23:59而已,而且還要注意的是不處在接收時段是暫時不接收推送消息而已,一旦到了接收時段那個消息還是會陸續推送到來。
首先小米推送支持最低的Android版本是2.2,所以要
然後需要的是如下權限:
然後就是要注冊一堆的BroadcastReceiver(都是靜態注冊,因為要長期處在後台運行,還有繼承了PushMessageReceiver的DemoMessageReceiver也需要注冊不要忘了)和Service,一共是3個廣播接收器和4個服務。
只要把demo的AppId和AppKey改好成自己的(記得是對應好包名和應用名字的),然後就能夠接收相應的推送了。
大概理解了這個Demo之後,就可以把小米推送移植到自己的App上去實現自己的需求了,移植的時候要注意:
1. 首先要想好應用的包名,從小米推送平台那裡注冊,獲得AppID和AppKey。
2. 然在把小米推送的SDK加入庫。
3. AndroidManifest文件裡面配置好權限(在Android6.0裡面的權限可能需要動態獲取),注冊好那些Service和BroadcastReceiver
4. 在應用開始的時候記得初始化注冊小米推送服務。
5. 最後就可以繼承一個PushMessageReceiver,在裡面為所欲為了。
6. 最後提供一個我寫的簡化之後的Demo,理解了上面之後可以參考我這個簡化的移植了,畢竟上面的太全面,我們實際看需求實現就行。
Fragment必須是依存於Activity而存在的,因此Activity的生命周期會直接影響到Fragment的生命周期。官網這張圖很好的說明了倆者的關系:可以看到Fr
江蘇省高中階段學業水平測試的地理試卷上的出現了一道“神題”——微信登錄頁面的圖地理知識~ 微信登錄圖是這個
Splash界面版本更新業務邏輯:
前兩天,一張小米的宣傳海報在網上曝光,海報中是小米剛簽下的紅米代言人之一劉昊然,而亮點在於他手中的手機,這部手機采用了雙攝像頭設計,應該是一部還未發布的紅米