android通知欄の実現方法分析

6891 ワード

この例は、android通知欄の実現方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
最近ずっとtwigeeのソースコードを修正しています。その中の一つはNotification欄に常駐しています。以前書いた時は「通知」というグループにしか現れませんでした。運行しています。グループに入れたいですが、どうやって入れるか分かりません。公式文書を調べてみたら、方法が分かりました。notificationのflagsフィールドに「FLAG_」を追加してください。ONGO ING.イベント」でいいです。同時に私もNotificationの使い方をまとめました。詳細は以下を参照してください
(1)システム定義のNotificationを使用する
以下は例示コードを使用します。

//    NotificationManager   
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns);
//   Notification     
int icon = R.drawable.icon; //    
CharSequence tickerText = "Hello"; //            
long when = System.currentTimeMillis(); //       ,         
//          Nofification
Notification notification = new Notification(icon,tickerText,when);
/*
*     
* notification.defaults |=Notification.DEFAULT_SOUND;
*           
* notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
* notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
*                       ,    notification flags    "FLAG_INSISTENT"
*   notification defaults     "DEFAULT_SOUND"  ,        sound        
*/
/*
*     
* notification.defaults |= Notification.DEFAULT_VIBRATE;
*              :
* long[] vibrate = {0,100,200,300}; //0       ,  100     ,  200       300  
* notification.vibrate = vibrate;
* long              
*   notification defaults     "DEFAULT_VIBRATE",        vibrate        
*/
/*
*   LED   
* notification.defaults |= Notification.DEFAULT_LIGHTS;
*        LED    :
* notification.ledARGB = 0xff00ff00;
* notification.ledOnMS = 300; //    
* notification.ledOffMS = 1000; //    
* notification.flags |= Notification.FLAG_SHOW_LIGHTS;
*/
/*
*        
* notification.flags |= FLAG_AUTO_CANCEL; //                  
* notification.flags |= FLAG_INSISTENT; //      ,         
* notification.flags |= FLAG_ONGOING_EVENT; //          "Ongoing" "    "  
* notification.flags |= FLAG_NO_CLEAR; //           "    " ,      ,
* //   FLAG_ONGOING_EVENT    
* notification.number = 1; //number                ,             
* //        ,   1  
* notification.iconLevel = ; //
*/
//         
Context context = getApplicationContext(); //   
CharSequence contentTitle = "My Notification"; //     
CharSequence contentText = "Hello World!"; //     
Intent notificationIntent = new Intent(this,Main.class); //          Activity
PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
// Notification    NotificationManager
mNotificationManager.notify(0,notification);

通知を更新するには、notificationを設定した後、再度setLatestEventInfoを呼び出して、再度通知を送るだけでいいです。つまり、再度notifyを呼び出します。
(2)カスタムNotificationを使用する
カスタムNotificationを作成するには、RemoteViewを使用することができます。自分の拡張メッセージを定義するには、まずRemoteViewオブジェクトを初期化し、Notificationのcontent Viewフィールドに伝達して、PendingIntentフィールドをcontent Intentフィールドに渡す必要があります。以下のコードの例は完全なステップです。
1、カスタムメッセージレイアウトview.xmlを作成する

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:id="@+id/image" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:layout_marginRight="10dp" />
<TextView android:id="@+id/text" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:textColor="#000" />
</LinearLayout>

2、プログラムコードの中でRemoteViewの方法を使ってイメージとtextを定義します。そしてRemoteViewオブジェクトをcontentViewフィールドに送る。

RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view);
contentView.setImageViewResource(R.id.image,R.drawable.icon);
contentView.setTextViewText(R.id.text,”Hello,this message is in a custom expanded view”);
notification.contentView = contentView;

3、Notificationのcontent IntentフィールドのためにIntentを定義します。(注意してください。カスタムViewを使うなら、setLatestEventInfoは必要ないです。()

Intent notificationIntent = new Intent(this,Main.class);
PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);
notification.contentIntent = contentIntent;

4、通知を送信する

mNotificationManager.notify(2,notification);

以下はすべての例示コードです。

//     NotificationManager   
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns);
//   Notification     
int icon = R.drawable.icon; //    
CharSequence tickerText = "Hello"; //            
long when = System.currentTimeMillis(); //       ,         
//          Nofification
Notification notification = new Notification(icon,tickerText,when);
RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.view);
contentView.setImageViewResource(R.id.image, R.drawable.iconempty);
contentView.setTextViewText(R.id.text, "Hello,this is JC");
notification.contentView = contentView;
Intent notificationIntent = new Intent(this,Main.class);
PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);
notification.contentIntent = contentIntent;
// Notification   NotificationManager
mNotificationManager.notify(0,notification);

Android関連の内容についてもっと興味がある読者は、当駅のテーマを調べてもいいです。「Android開発入門と上級教程」、「Androidデバッグ技術とよくある問題解決方法のまとめ」、「Androidマルチメディア操作技術まとめ(オーディオ、ビデオ、録音など)」、「Android基本コンポーネントの使い方のまとめ」、「AndroidビューViewテクニックのまとめ」、「Androidレイアウトlayout技巧まとめ」および「Androidコントロールの使い方のまとめ
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。