`
king_tt
  • 浏览: 2084080 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【Android 开发教程】Notification通知

 
阅读更多

本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/


到目前为止,想必大家已经都熟悉使用Toast去给用户显示信息了。尽管使用Toast很方便,但是Toast显示的通知并不是永久存储的。它只在屏幕上显示一小段时间,然后就消失了。如果它包含一些特别重要的信息,如果用户没有观察屏幕,那么用户就很容易错过它。

对于那些重要的信息,应该采用一种更加持久保存的方法。在这种情况下,应该使用NotificationMnanger(消息管理器)去显示一个长久的信息,这个消息被显示在了StatusBar(状态栏)上面,使用用户能够很容易地看见。

接下来展示如何发送一个Notification通知。

1. 创建一个工程:Notifications。

2. 在包中新建一个名为NotificationView的类,同时在res/layout文件夹下面新建一个名为notification.xml 文件,它将作为NotificationView的视图。

3. notification.xml中的文件。

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="Herearethedetailsforthenotification..."/>
  10. </LinearLayout>

4.NotificationView.java中的代码。
  1. publicclassNotificationViewextendsActivity{
  2. @Override
  3. publicvoidonCreate(BundlesavedInstanceState){
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.notification);
  6. //---lookupthenotificationmanagerservice---
  7. NotificationManagernm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  8. //---cancelthenotificationthatwestarted---
  9. nm.cancel(getIntent().getExtras().getInt("notificationID"));
  10. }
  11. }

5. AndroidManifest.xml中的代码。

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="net.learn2develop.Notifications"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdkandroid:minSdkVersion="14"/>
  7. <uses-permissionandroid:name="android.permission.VIBRATE"/>
  8. <application
  9. android:icon="@drawable/ic_launcher"
  10. android:label="@string/app_name">
  11. <activity
  12. android:label="@string/app_name"
  13. android:name=".NotificationsActivity">
  14. <intent-filter>
  15. <actionandroid:name="android.intent.action.MAIN"/>
  16. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  17. </intent-filter>
  18. </activity>
  19. <activityandroid:name=".NotificationView"
  20. android:label="Detailsofnotification">
  21. <intent-filter>
  22. <actionandroid:name="android.intent.action.MAIN"/>
  23. <categoryandroid:name="android.intent.category.DEFAULT"/>
  24. </intent-filter>
  25. </activity>
  26. </application>
  27. </manifest>
6. main.xml中的代码。
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <Button
  7. android:id="@+id/btn_displaynotif"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="DisplayNotification"
  11. android:onClick="onClick"/>
  12. </LinearLayout>
7. 最后,NotificationActivity.java中的代码。
  1. publicclassNotificationsActivityextendsActivity{
  2. intnotificationID=1;
  3. /**Calledwhentheactivityisfirstcreated.*/
  4. @Override
  5. publicvoidonCreate(BundlesavedInstanceState){
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. }
  9. publicvoidonClick(Viewview){
  10. displayNotification();
  11. }
  12. protectedvoiddisplayNotification()
  13. {
  14. //---PendingIntenttolaunchactivityiftheuserselects
  15. //thisnotification---
  16. Intenti=newIntent(this,NotificationView.class);
  17. i.putExtra("notificationID",notificationID);
  18. PendingIntentpendingIntent=
  19. PendingIntent.getActivity(this,0,i,0);
  20. NotificationManagernm=(NotificationManager)
  21. getSystemService(NOTIFICATION_SERVICE);
  22. Notificationnotif=newNotification(
  23. R.drawable.ic_launcher,
  24. "Reminder:Meetingstartsin5minutes",
  25. System.currentTimeMillis());
  26. CharSequencefrom="SystemAlarm";
  27. CharSequencemessage="Meetingwithcustomerat3pm...";
  28. notif.setLatestEventInfo(this,from,message,pendingIntent);
  29. //---100msdelay,vibratefor250ms,pausefor100msand
  30. //thenvibratefor500ms---
  31. notif.vibrate=newlong[]{100,250,100,500};
  32. nm.notify(notificationID,notif);
  33. }
  34. }
8. 调试。

9. 点击Display Notification按钮,在状态栏上面就会出现一个notification通知。如图:

10.将状态栏拉下来,就会显示这个Notification通知的详尽信息。如图:

11. 点击这个Notification通知,就会显示NotificationView的界面,同时,状态栏上面的通知也消失了。如图:


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics