返回介绍

當啟動Activity時保留導航

发布于 2020-04-01 13:16:48 字数 4456 浏览 946 评论 0 收藏 0

編寫:fastcome1985 - 原文:http://developer.android.com/training/notify-user/navigation.html

部分設計一個notification的目的是為了保持用戶的導航體驗。為了詳細討論這個課題,請看 Notifications API引導,分為下列兩種主要情況:

* 常規的activity
你啟動的是你application工作流中的一部分[Activity](ux/notify-user/developer.android.com/reference/android/app/Activity.html)。
* 特定的activity
用戶只能從notification中啟動,才能看到這個[Activity](http://developer.android.com/intl/zh-cn/reference/android/app/Activity.html),在某種意義上,這個[Activity](http://developer.android.com/intl/zh-cn/reference/android/app/Activity.html)是notification的擴展,額外展示了一些notification本身難以展示的信息。

設置一個常規的Activity PendingIntent

設置一個直接啟動的入口Activity的PendingIntent,遵循以下步驟:

1 在manifest中定義你application的Activity層次,最終的manifest文件應該像這個:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".ResultActivity"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>
</activity>

2 在基於啟動Activity的Intent中創建一個返回棧,比如:

int id = 1;
...
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent to the top of the stack
stackBuilder.addNextIntent(resultIntent);
// Gets a PendingIntent containing the entire back stack
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
...
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());

設置一個特定的Activity PendingIntent

一個特定的Activity不需要一個返回棧,所以你不需要在manifest中定義Activity的層次,以及你不需要調用 addParentStack()方法去構建一個返回棧。作為代替,你需要用manifest設置Activity任務選項,以及調用 getActivity()創建PendingIntent

  1. manifest中,在Activity的 標籤中增加下列屬性: android:name="activityclass" activity的完整的類名。 android:taskAffinity="" 結合你在代碼裡設置的FLAG_ACTIVITY_NEW_TASK標識, 確保這個Activity不會進入application的默認任務。任何與 application的默認任務有密切關係的任務都不會受到影響。 android:excludeFromRecents="true" 將新任務從最近列表中排除,目的是為了防止用戶不小心返回到它。

  2. 建立以及發佈notification: a.創建一個啟動Activity的Intent. b.通過調用setFlags()方法並設置標識FLAG_ACTIVITY_NEW_TASK 與 FLAG_ACTIVITY_CLEAR_TASK,來設置Activity在一個新的,空的任務中啟動。 c.在Intent中設置其他你需要的選項。 d.通過調用 getActivity()方法從Intent中創建一個 PendingIntent,你可以把這個PendingIntent 當做 setContentIntent()的參數來使用。 下面的代碼片段演示了這個過程:

// Instantiate a Builder object.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
// Creates an Intent for the Activity
Intent notifyIntent =
        new Intent(new ComponentName(this, ResultActivity.class));
// Sets the Activity to start in a new, empty task
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
        Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
PendingIntent notifyIntent =
        PendingIntent.getActivity(
        this,
        0,
        notifyIntent,
        PendingIntent.FLAG_UPDATE_CURRENT
);

// Puts the PendingIntent into the notification builder
builder.setContentIntent(notifyIntent);
// Notifications are issued by sending them to the
// NotificationManager system service.
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Builds an anonymous Notification object from the builder, and
// passes it to the NotificationManager
mNotificationManager.notify(id, builder.build());

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文