【轉】Pro Android學習筆記(九八):BroadcastReceiver(2):接收器觸發通知

文章轉載只能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處:http://blog.sina.com.cn/flowingflying或做者@愷風Wei-傻瓜與非傻瓜html

廣播接受可用於本地,也能夠用於不一樣的進程(應用)間。廣播還經常使用於後臺服務,當接收器收到某個廣播消息時,一般會在通知欄中提示用戶,用戶點擊通知,能夠進入某個Activity中進行處理。android

小例子瀏覽器

接收器應用爲本小例子,發送廣播應用利用上一學習的小例子。app

Pro <wbr>Android學習筆記(九八):BroadcastReceiver(2):接收器觸發通知

代碼

關於通知,能夠參考Android學習筆記(五五):通知Notification(下)ide

public class NotificationReceiver extends BroadcastReceiver{
    private static int NOTIFY_ID = 1000; 
    private static final String tag = "NotificationReceiver";
    @Override
    public void onReceive(Context context, Intent intent) { 
        Utils.logThreadSignature(tag);
        Log.d(tag,"intent = " + intent);

       
        String message = intent.getStringExtra("message");
        Log.d(tag,message);
        sendNotification(context,message);
    }
   
    private void sendNotification(Context context, String message){
        //【1】獲取Notification 管理器的參考 
        NotificationManager notifyMgr= (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);         
        //【2】設置通知。PendingIntent表示延後觸發,是在用戶下來狀態欄並點擊通知時觸發,觸發時PendingIntent發送intent,本例爲打開瀏覽器到指定頁面。           
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.google.com"));
        PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);         
        Notification notification = new Notification.Builder(context)
                                    .setSmallIcon(R.drawable.ic_launcher)
                                    .setTicker("Hello")
                                    .setContentTitle("Title")
                                    .setContentText("Content text")
                                    .setContentIntent(pi)
                                    .build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL; //點擊後刪除,若是是FLAG_NO_CLEAR則不刪除,FLAG_ONGOING_EVENT用於某事正在進行,例如電話,具體查看參考。 
       
 //【3】發送通知到通知管理器。第一個參數是這個通知的惟一標識,經過這個id能夠在之後cancel通知,更新通知(發送一個具備相同id的新通知)。這個id在應用中應該是惟一的。
        notifyMgr.notify(NOTIFY_ID, notification);
    }
}學習

XMLui

在AndroidManifest.xml中一樣要進行receiver的聲明,標明所關注的廣播。咱們的小例子無需有activity,只需receiver便可。在安裝是會顯示:google

Pro <wbr>Android學習筆記(九八):BroadcastReceiver(2):接收器觸發通知

因爲在manifest中以告知系統所關心的廣播,無需有一個App正在運行,一樣也能夠正確地實現觸發。spa

建立本身的Content View風格:RemoteView.net

上面咱們使用了系統缺省的Content View。有時咱們但願自行定義content view的風格,如圖所示,由一個Textview和一個Button組成。

Pro <wbr>Android學習筆記(九八):BroadcastReceiver(2):接收器觸發通知

咱們首先定義本身的layout,在res/layout/中加入相關的xml文件,本例爲content_view.xml,以下:

Pro <wbr>Android學習筆記(九八):BroadcastReceiver(2):接收器觸發通知

相關的notification生成代碼以下:

private void sendNotification2(Context context, String message){ 
    NotificationManager notifyMgr= (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
               
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.google.com"));
    PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
 
    
    //建立RemoteViews對象。參數1爲包名,參數2爲對應的layout文件ID。 而後設置remoteViews中的text,icon等等。home page中的widget views也是remote views,咱們將在之後學習。 
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.content_view);
    //對當中的TextView進行設置
    remoteViews.setTextViewText(R.id.title, "My Custom Title");
    remoteViews.setTextColor(R.id.title, Color.RED);
   //對當中的非TextView,例如Button進行設置,參數2對應方法名稱,本例button.setText(),所以取「setText」,參數3對應傳遞到button.setText(value)中的value。
    remoteViews.setCharSequence(R.id.button, "setText", "My custom content text");
   
    Notification notification = new Notification.Builder(context)
                                .setSmallIcon(R.drawable.ic_launcher)
                                .setTicker("Hello")

                                .setContent(remoteViews) //在notification中設置content view
                                .setContentIntent(pi)
                                .build();

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notifyMgr.notify(NOTIFY_ID + 1, notification);

}

打開Activity

前面,咱們使用了通知管理器,實際上咱們能夠在收到廣播時直接經過startActivity開啓activity,但要帶有下面的flag:Intent.FLAG_ACTIVITY_NEW_TASK,Inetent.FLAG_FROM_BACKGROUND,或者Intent.FLAG_ACTIVITY_SINGLETOP。

相關連接: 個人Android開發相關文章

轉自:http://blog.csdn.net/flowingflying/article/details/6212512

相關文章
相關標籤/搜索