1. 程式人生 > >Android 根據訊息推送內容跳轉至指定頁面(極光推送)

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程式碼  收藏程式碼
  1. Activity啟動模式設定:  
  2.         <activity android:name=".MainActivity" android:launchMode="standard" />  
  3. Activity的四種啟動模式:  
  4.     1. standard  
  5.         預設啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中,永遠不會呼叫onNewIntent()。  
  6.     2. singleTop  
  7.         如果在任務的棧頂正好存在該Activity的例項, 就重用該例項,並呼叫其onNewIntent(),否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項,而不會呼叫onNewIntent(),此時就跟standard模式一樣)。  
  8.     3. singleTask  
  9.         如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中(此時不會呼叫onNewIntent())。   
  10.     4. singleInstance  
  11.         在一個新棧中建立該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

springboothtml頁面配置

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">