国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 接收推送消息跳轉到指定頁面的方法

2019-10-22 18:17:10
字體:
來源:轉載
供稿:網友

問題的提出

本次接入的是個推,其他家的推送沒有研究過,思路應該是類似的

App在前臺,這個時候需要彈出一個對話框,提醒用戶有新的消息,是否要查看,查看的話跳轉到指定頁面

App在后臺,或是App進程已經被系統回收,收到推送后App進程會被個推拉起。這時候要展示通知,點擊通知欄打開App并跳轉到目標頁面,關閉目標頁面后需要返回到應用首頁,而不是直接推出App

實現思路

App在前臺時,彈出Dialog提醒用戶有新消息,但是最新版的個推文檔接收推送消息是繼承IntentService,無法獲取彈出Dialog所需要的Context(注意不能用getApplicationContext()),所以采用Dialog樣式的Activity來實現

App在后臺時,如果直接在PendingIntent中傳目標Activity的Intent,則在退出目標Activity時會直接退出應用,感覺像是閃退了一樣;如果是跳轉到首頁,然后在首頁中檢測是否是由點擊通知進入應用的來進行跳轉,這樣的話首頁就會閃屏。綜上方法都不是很理想,一個比較好的解決方案是給PendingIntent傳遞一個Intent數組,分別放置目標Activity和首頁,這樣效果比較好

App在前臺時,彈出Dialog樣式的Activity

設置Activity樣式

<style name="AlertDialogActivityTheme" parent="Theme.AppCompat.Dialog">  <item name="windowActionBar">false</item>  <item name="android:windowFrame">@null</item>  <item name="windowNoTitle">true</item> //去掉標題  <item name="android:windowBackground">@android:color/transparent</item> //背景透明  <item name="android:windowCloseOnTouchOutside">true</item> //設置觸摸彈框外面是否會消失  <item name="android:windowIsFloating">true</item>  <item name="android:windowContentOverlay">@null</item>  <item name="android:windowIsTranslucent">true</item></style>

AndroidManifest.xml

<activity  android:name=".getui.AlertDialogActivity"  android:theme="@style/AlertDialogActivityTheme"></activity>

此處需要注意的是這里的Activity繼承的是AppCompatActivity,如果是繼承Activity,則一些屬性設置需要微調,比如去掉標題要改為

<item name="android:windowNoTitle">true</item>

以上設置以后還需要設置彈框的大小

public class AlertDialogActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.dialog_activity);        //設置彈框大小,此處寬度為屏幕寬度減去160像素    getWindow().setLayout(DeviceUtil.getDisplayParametersW(this)-160, ViewGroup.LayoutParams.WRAP_CONTENT);    getWindow().setGravity(Gravity.CENTER);    initView();  }}

App在后臺或是已經被銷毀

我們在接收到推送消息時都會彈出通知,這里只需要對常用的彈出通知方式進行微調一下

//關鍵的地方PendingIntent contentIntent = PendingIntent.getActivities(context, 0, intents, PendingIntent.FLAG_UPDATE_CURRENT);NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);NotificationCompat.Builder builder = new NotificationCompat.Builder(context)    //省略其他的一些設置    .setContentIntent(contentIntent)    //省略其他的一些設置    Notification notification = builder.build();notification.flags = Notification.FLAG_AUTO_CANCEL;mNotificationManager.notify((int) System.currentTimeMillis() / 1000, notification);

上面關鍵的改動就在PendingIntent,里面的intents參數存放首頁Activity和目標Activity,比如

Intent[] intents = new Intent[2];Intent intent_main = new Intent(getApplicationContext(), MainActivity.class);Intent intent_target = new Intent(getApplicationContext(), TargetActivity.class);intents[0] = intent_main;intents[1] = intent_target;

通過以上的設置后,點擊通知欄就會打開TargetActivity,從TargetActivity返回后會打開MainActivity,而不會直接退出

需要注意的是,MainActivity需要設置啟動模式為singleInstance
AndroidManifest.xml

<activity  android:name=".ui.main.MainActivity"  android:launchMode="singleInstance" />

以上就是接收推送消息后的跳轉的一些內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临夏县| 博罗县| 威信县| 兴义市| 虹口区| 马鞍山市| 乌拉特中旗| 邻水| 韶关市| 鄂伦春自治旗| 泽州县| 白水县| 塔城市| 新巴尔虎左旗| 台江县| 玉环县| 大宁县| 麻栗坡县| 新田县| 达孜县| 阿坝| 崇州市| 敦煌市| 伊金霍洛旗| 孟连| 剑河县| 夹江县| 涪陵区| 伊吾县| 张北县| 寿阳县| 农安县| 丁青县| 济源市| 红原县| 新余市| 平顶山市| 桂林市| 盐津县| 翁源县| 九龙县|