Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android官方開發文檔Training系列課程中文版:通知用戶之創建不同導航方式的Activity

Android官方開發文檔Training系列課程中文版:通知用戶之創建不同導航方式的Activity

編輯:關於Android編程

設計通知時要考慮到用戶所預想的導航體驗。通常有以下兩種情況:

常規的Activity(Regular activity)

這裡所啟動的Activity是作為應用程序的正常流程部分出現的。

指定的Activity(Special activity)

用戶只會看到這個Activity,如果這個Activity是從通知啟動的話。在直覺上,這個Activity是用來展示通知上的詳細信息的。

設置常規的Activity

設置啟動常規的Activity需要執行以下步驟:

1.在清單文件中定義Activity的層級,最終的清單文件應該是這樣的:

    
        
        
    


    
2.創建一個基於回退棧的Intent,它用來啟動父Activity(下面的代碼可能有誤,請自行驗證。):
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

啟動指定的Activity不需要回退棧,所以不需要在清單文件中定義Activity的層級,也不需要在代碼中使用addParentStack()構建回退棧。相反的,使用清單文件來設置Activity的任務模式,並通過getActivity()創建PendingIntent就可以完成創建。

1.在清單文件中,為Activity添加如下屬性:

android:name=”activityclass” 指定該Activity的全限定名稱. android:taskAffinity=”” 與在代碼中設置的FLAG_ACTIVITY_NEW_TASK標志一同使用。這可以確保這個Activity不會進入應用程序的默認任務棧中。任何已有的任務棧皆不會受到這個屬性的影響。 android:excludeFromRecents=”true” 將該Activity從Recents中排除,所以用戶不會意外的再通過返回鍵啟動這個Activity.

下面的代碼段展示了這個屬性的設置:



...
2.構建及發射通知
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());
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved