Android 根據訊息推送內容跳轉至指定頁面(極光推送)
首先認識一下安卓newIntent方法的使用:
newIntent方法的使用在於如果activity已經開啟了,並設定了啟動模式為: android:launchMode="singleTask"的時候,當再次使用intent來啟動這個activtiy的時候就會進入這個方法裡面onNewIntent(Intent intent) ,當在接受通知欄的函式裡面,就可以傳遞引數,在該activity的onnewIntent進行判斷處理,如果Activity被關閉了,將會重新呼叫onCreate方法,所以安全起見,在onCreate中也需要加入判斷指定需要顯示的介面,如下圖:
關於onnewintent的部分解釋如下:
然後需要自定義一個廣播接收器用於接收通知欄資訊
<!-- User defined. 使用者自定義的廣播接收器 --> <receiver android:name=".notificationbar.MessageReceiver" 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" /> <category android:name="hz.resfine.helpme_repair" /> </intent-filter> </receiver>
/** * 自定義廣播接收器 以極光推送為例子 * Created by zhengxt on 2017-03-17. */ public class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); //網路狀態監聽 //如果無網路連線activeInfo為null ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mobileInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo activeInfo = manager.getActiveNetworkInfo(); if(activeInfo != null){ // Toast.makeText(context, "mobile:" + mobileInfo.isConnected() + "\n" // + "wifi:" + wifiInfo.isConnected() + "\n" // + "active:" + activeInfo.getTypeName(), Toast.LENGTH_SHORT).show(); MainActivity.mainActivity_instance.getHomeData(); //獲取首頁資料 //有網路連線的時候開啟定位 if(Constants.mapServiceState == 2){ // MainActivity.mainActivity_instance.mLocationClient.startLocation(); MainActivity.mainActivity_instance.honeDismissMyDialog(); } } // 通知欄點選事件監聽 // 通知欄收到訊息時觸發 NotificationBarEvent notificationBarEvent = new NotificationBarEvent(); /** * 極光推送 */ if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { // Logger.d(TAG, "JPush使用者註冊成功"); } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { // Logger.d(TAG, "接受到推送下來的自定義訊息"); } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { // Logger.d(TAG, "接受到推送下來的通知");在通知到達時觸發 notificationBarEvent.receivingNotification(context,bundle.getString(JPushInterface.EXTRA_ALERT)); } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { // Logger.d(TAG, "使用者點選打開了通知");當用戶點選時觸發 notificationBarEvent.openNotification(context,bundle.getString(JPushInterface.EXTRA_ALERT)); } } }其中 NotificationBarEvent 是自定義封裝的事件處理類,將通知欄的通知資訊資料傳遞到該類中,在類裡面做具體的處理
/** * 通知欄點選事件監聽 * 通知欄收到訊息時觸發 * Created by zhengxt on 2017-08-01. */ public class NotificationBarEvent { //接受推送下來的通知,訊息到達時觸發 public void receivingNotification(Context context, String message1) {String message = message1; //獲取等到通知欄訊息 MainActivity.mainActivity_instance.GetStoreUnreadMessages(); //獲取商家未讀訊息 } //通知欄點選監聽事件,使用者點選時觸發 public void openNotification(Context context, String description) { String alert = description; //根據訊息內容跳轉到指定頁面Intent i = new Intent(context, MainActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("message1", Constants.MY_BUSINESS1); i.putExtra("businessindex", "2"); context.startActivity(i); } }
MainActivity中onNewIntent方法,在該方法中接收自定義廣播接收器傳過來的引數並做相應的操作,同時為了防止activity被銷燬,在onCreate中也應做相應操作。
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); messageType = intent.getIntExtra("message1", 0); myOrderIndex = intent.getStringExtra("orderindex"); myBusinessIndex = intent.getStringExtra("businessindex"); if (messageType == Constants.MY_ORDER1) { setTabSelection(1); } else if (messageType == Constants.MY_BUSINESS1) { setTabSelection(2); }}
擴充套件知識:
Android中Activity啟動模式詳解在Android中每個介面都是一個Activity,切換介面操作其實是多個不同Activity之間的例項化操作。在Android中Activity的啟動模式決定了Activity的啟動執行方式。
Android總Activity的啟動模式分為四種:
Java程式碼
- Activity啟動模式設定:
- <activity android:name=".MainActivity" android:launchMode="standard" />
- Activity的四種啟動模式:
- 1. standard
- 預設啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中,永遠不會呼叫onNewIntent()。
- 2. singleTop
- 如果在任務的棧頂正好存在該Activity的例項, 就重用該例項,並呼叫其onNewIntent(),否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項,而不會呼叫onNewIntent(),此時就跟standard模式一樣)。
- 3. singleTask
- 如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中(此時不會呼叫onNewIntent())。
- 4. singleInstance
- 在一個新棧中建立該Activity例項,並讓多個應用共享改棧中的該Activity例項。一旦改模式的Activity的例項存在於某個棧中,任何應用再啟用改Activity時都會重用該棧中的例項,其效果相當於多個應用程式共享一個應用,不管誰啟用該Activity都會進入同一個應用中。
最後附上類似的部落格地址:http://blog.csdn.net/nihaoqiulinhe/article/details/50697301
相關推薦
Android 根據訊息推送內容跳轉至指定頁面(極光推送)
首先認識一下安卓newIntent方法的使用:newIntent方法的使用在於如果activity已經開啟了,並設定了啟動模式為: android:launchMode="singleTask"的時候,當再次使用intent來啟動這個activtiy的時候就會進入這個方法裡
在整合極光推送後,根據不同推送內容跳轉App相應的頁面
前言:由於某push到達率問題,所以我們決定換成口碑較高的極光推送,在此梳理一下完成過程,小菜鳥剛剛起步,不足之處還請各位多多指教~ 需求:1.整合極光推送 2.根據推送內容的不同跳轉相應的頁面,也就是獲取推送內容並作出處理(非官網中所
信鴿Android推送解決問題記錄--無法跳轉到指定頁面
之前收到客服反饋的問題:華為手機,點選通知訊息後,無法跳轉到指定頁面。當時同事定位的問題是廠商通道,因為忙於其他需求,給出的解決辦法是暫時關掉廠商推送。最近有時間了,開始解決這個問題。 整合信鴿推送的時候,可以選擇整合小米、華為、魅族這三家的廠商推送,按照文件整合後,使用相
iOS開發 極光推送收到通知後跳轉到指定頁面
iOS在開放中,會使用到極光推送,然後收到推送時,往往需要跳轉指定的介面,而跳轉到指定介面時,又分為程式未殺死情況下的跳轉和程式已殺死的跳轉,即離線狀況下的跳轉: 當程式未殺死狀況下的條狀方法很簡單: // iOS 10 Support - (void)jpush
android鎖屏狀態下, 新訊息喚醒螢幕,並跳轉到指定頁面
最近在做一個專案,有個功能,就和QQ電話差不多,我這邊手機鎖屏狀態,當QQ電話過來時,立刻喚醒螢幕,並顯示QQ來電介面,我的是當裝置端有事件發生時通知app端彈出介面,實時顯示裝置端資訊。 最核心的程
Android EditText 輸入回車符自動跳轉至下一個EditText
在輸入資訊時,在EditText控制元件輸入回車鍵,常常不是換行二十讓游標直接跳轉到下一個編輯框。該功能主要用到了文字監聽器藉口TextWatcher,主要監聽使用者是否輸入回車符,如果監聽到已輸入回車符,就自動將焦點移動到下一個控制元件,從而實現回車符自動跳轉的要求 對T
JS與iOS互動之OC獲取JS內容跳轉到指定控制器實現技巧
前言 之前有不少人問我關於JS與iOS進行互動的問題,也就是,我們怎麼才能從通過獲取JS的內容顯示到指定的控制器中,今天我給大家寫了一個Demo,在這裡互動我們用到了WKWebView而不是UIwebview,至於為什麼會使用它其實在前一章關於WKWebVie
解決js中post提交數據並且跳轉到指定頁面的問題總結
設置 表單 for 並且 無法 fun 開發 完成 我們 今天在開發中過程中遇到了這個問題,js中利用JQuery中的 $.post("url", id, function(){}); 這個方法是數據提交正常,但是後臺處理完成之後跳轉無法成功。經過分析,後臺只是將要跳轉
多少秒後跳轉到指定頁面
obj baidu ref class time nbsp pan blog 跳轉 (1)var obj=setTimeout("location.href=‘http://www.baidu.com‘;",5000); (2)var obj1=setTimeout(f
js或jQuery中 郵箱跳轉的問題,跳轉到指定郵箱(通過layui的ifram實現)
按鈕 字符 新浪郵箱 實現 分享 顯示 最小化 span jquer 對剛做的東西記個筆記 如果遇到同樣問題解決起來又問題的歡迎留言 var emailtext = $("#TextBoxEmail").val();//獲得要截取的值
HTML跳轉至別的頁面
跳轉 適合 百度 百度網 網站 項目 書寫 herf 格式 1。我們經常用上網點擊網頁內容的時候,會跳轉到別的網頁,或者是本網站的另一頁,那麽問題來了,如何實現的的呢 。 2.其實在HTML中實現這樣的效果其實不難,首先我們要學習的是跳轉頁面的路徑,一般分為兩種:
springBoot 沒有跳轉到指定頁面
沒有 auto div spring autoconf clas thymeleaf framework nbsp Whitelabel Error Page 解決辦法,添加依賴: <dependency> <groupId
springboot2 security 登陸成功後無法跳轉到指定頁面,還是預設頁面
轉載於https://blog.csdn.net/qinkaiyuan94/article/details/82085622 一開始用的這個 http .formLogin() .defaultSuccessUrl("/login/su
jquery點擊一組按鈕中的一個,跳轉至對應頁面處理策略。(如點擊訂單列表中的一個訂單,跳轉至該訂單的詳情)
跳轉 () 列表 操作 進行 斷點 cat 訂單 一個 將改組按鈕的數據設置一個相同的屬性(如class),然後每個按鈕設置不同的id 當用戶點擊屬性為class的按鈕,根據id屬性來判斷點擊的是哪個按鈕,然後進行相關操作。 代碼示例: <script> $("
點選外部連結跳轉App指定頁面SingleTask模式
1.上一篇講到如何點選外部連結跳轉app的方法,經過測試,當開啟App的時候,點選連結時候會重新開啟一個新的App程序,如果你想從原來的開啟APP跳進去,那麼使用SingleTask模式配合android:taskAffinity屬性一起使用. 如果單獨使用Single
springboot跳轉至html頁面配置
1,首先在pom檔案中引入模板引擎jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-
js監聽PC/手機/微信瀏覽器後退按鈕事件,可跳轉到指定頁面;
$(document).ready(function (e) { var counter = 0; if (window.history && window.history.pushState) {
SpringBoot跳轉渲染HTML頁面(詳解)
本文的例項程式碼也會放在文末分享給大家的。正文開始: 目錄 1、 規則 2、 示例 (1) 原理 一、直接訪問 直接訪問說白了就是訪問html頁面的地址前面是沒有資料夾的。如下圖 1、新建一個Spr
Django寫一個裝飾器:從首頁點選詳情頁,如已登入,進詳情頁;如未登入,跳轉至登入頁面,登入成功後,跳轉至詳情頁
有的網站需求,如果使用者未登入,能夠進入首頁,但當點選想要進入詳情頁的時候,就會跳轉到登入頁面,登入完成之後,有的需求需要進入首頁;有的需要進入點選登入之前你的意向頁面 第一種:登入之後,進入首頁。 第二種:登入之後,進入登入之前你點選想進入的意向頁面 那麼,對於第一種,登入之後,進入首
html 利用a標籤實現同頁面跳轉至指定位置
輸入: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">