Notification和Activity互動,notification

來源:互聯網
上載者:User

Notification和Activity互動,notification
概述

  通知(Notification)就是程式在不影響使用者操作的情況下,通過手機頂部彈出訊息告訴使用者的一種語音總機方式,並且可以通過下拉通知操作抽屜通知,實現Notification與活動、通知和服務通訊。例如:通知與活動相互連信,活動通過NotificationManager發送通知(建立通知),而抽屜通知裡面的操作則通過發送廣播事件傳遞資訊,此時活動只要已經註冊過該廣播事件的接收器,那麼就能接收到通知的資訊,從而實現通知和活動互動。

例子(通知和活動同步音樂播放和暫停)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >            <FrameLayout android:layout_width="match_parent"        android:layout_height="match_parent">                <ImageView android:layout_width="match_parent"            android:layout_height="match_parent"            android:src="@drawable/bg"            android:scaleType="fitXY"/>                <ImageView             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/play_over"            android:layout_gravity="center"            android:clickable="true"            android:id="@+id/imageView"            android:background="@drawable/img_bg"/>            </FrameLayout>        </LinearLayout>

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="64dp"    android:background="#e0e0e0"    android:orientation="horizontal">        <ImageView         android:id="@+id/imageView1"        android:layout_width="64dp"        android:layout_height="64dp"        android:src="@drawable/sc"/>        <RelativeLayout         android:layout_width="match_parent"        android:layout_height="match_parent">                      <ImageView         android:id="@+id/image_control"        android:clickable="true"        android:padding="4dp"        android:layout_alignParentLeft="true"        android:layout_centerVertical="true"        android:layout_width="48dp"        android:layout_height="48dp"        android:src="@drawable/play_over"/>                        <TextView            android:id="@+id/tv_title"             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_toRightOf="@id/image_control"            android:padding="4dp"            android:text="Sweet Child O' Mine"            android:singleLine="true"            android:textAppearance="?android:attr/textAppearanceMedium"/>              <TextView          android:id="@+id/tv_nowTime"           android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_toRightOf="@id/image_control"            android:text="00:00"            android:layout_alignParentBottom="true"/>            <TextView          android:id="@+id/tv_totallTime"           android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_alignParentBottom="true"            android:text="00:00"/>                    </RelativeLayout>    </LinearLayout>


package com.liujun.activity;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import com.liujun.liujunmusicnotification.R;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.media.MediaPlayer;import android.os.Bundle;import android.support.v4.app.NotificationCompat;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.RemoteViews;public class MainActivity extends Activity {private MediaPlayer mediaPlayer;//媒體播放器private NotificationManager notificationManager;//通知管理器private ImageView imageView;//播放音樂圖片按鈕private boolean isPlaying=false;//是否現正播放音樂//意圖public static final String PLAYMUSIC_INTENT="PLAYMUSIC_INTENT";public static final String PAUSEMUSIC_INTENT="PAUSEMUSIC_INTENT";//通知標識IDpublic static final int NOTIFICATION_ID=1;//時間計時器private Timer timer;private MyBroadCastRecever recever;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mian_activity);//執行個體化媒體播放器mediaPlayer=MediaPlayer.create(this, R.raw.sc);//執行個體化通知管理器notificationManager=(NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);timer=new Timer();imageView=(ImageView) this.findViewById(R.id.imageView);imageView.setOnClickListener(onClickListener);//註冊接收通知欄發送的廣播事件IntentFilter intentFilter=new IntentFilter();intentFilter.addAction(PAUSEMUSIC_INTENT);intentFilter.addAction(PLAYMUSIC_INTENT);recever=new MyBroadCastRecever();this.registerReceiver(recever, intentFilter);}OnClickListener onClickListener=new OnClickListener() {@Overridepublic void onClick(View v) {if (!isPlaying) {//沒有播放音樂//開始播放音樂playMusic();//更改圖片背景imageView.setImageResource(R.drawable.pause_over);//更改標誌isPlaying=true;}else {//現正播放音樂//暫停播放音樂pauseMusic();//更改圖片背景imageView.setImageResource(R.drawable.play_over);//更改標誌isPlaying=false;}//發送通知欄activitySendNotification();}};/** * 播放音樂 */protected void playMusic() {if (mediaPlayer==null) {mediaPlayer=MediaPlayer.create(MainActivity.this, R.raw.sc);}if (timer==null) {timer=new Timer();}//開啟計時器任務,每個一秒 更新抽屜通知音樂播放進度timer.schedule(new MyTimerTask(), 0, 1000);//播放音樂mediaPlayer.start();}//時間任務,更新抽屜通知,播放進度(注意:每次調用必須重新new)private class MyTimerTask extends TimerTask{@Overridepublic void run() {//工作端發送通知activitySendNotification();}}/** * 發送通知 */protected void activitySendNotification() {//通知構建器NotificationCompat.Builder builder=new NotificationCompat.Builder(this); //設定小表徵圖builder.setSmallIcon(R.drawable.favorite);//載入自訂遠程布局RemoteViews remoteView=(RemoteViews) new RemoteViews(this.getPackageName(), R.layout.my_notification);//設定不可以拉動取消抽屜通知builder.setOngoing(true);//設定標題remoteView.setTextViewText(R.id.tv_title, "Sweet Child O' Mine");//當前播放時間(注意:當進入介面播放音樂時退出介面,不是暫停時退出介面,那麼就有可能在程式執行//onDestroy()方法時將mediaPlayer釋放共置空了,而此段代碼是在子線程中的,與主線程不同步退出,//那麼就導致mediaPlayer為空白,從而報錯)if (mediaPlayer==null) {return;}Date currentDate=new Date(mediaPlayer.getCurrentPosition());//總時間長度Date totalDate=new Date(mediaPlayer.getDuration());SimpleDateFormat simpleDateFormat=new SimpleDateFormat("mm:ss");//設定當前播放時間進度remoteView.setTextViewText(R.id.tv_nowTime, simpleDateFormat.format(currentDate));//設定歌曲總時間長度remoteView.setTextViewText(R.id.tv_totallTime, simpleDateFormat.format(totalDate));Log.i("liujun", "是否現正播放音樂:--"+isPlaying);if (isPlaying) {//現正播放音樂//顯示可以暫停圖片remoteView.setImageViewResource(R.id.image_control, R.drawable.pause_over);}else {//顯示可以播放圖片remoteView.setImageViewResource(R.id.image_control, R.drawable.play_over);}//通知欄,互動互動notificationToActivity(remoteView,isPlaying);//載入視圖布局builder.setContent(remoteView);//建立通知Notification notification=builder.build();//發送通知notificationManager.notify(NOTIFICATION_ID, notification);}/** * 通知欄互動活動 * @param isPlaying */private void notificationToActivity(RemoteViews remoteView,boolean isPlaying) {Intent intent=new Intent();if (isPlaying) {//現正播放音樂//試圖暫停播放音樂intent.setAction(PAUSEMUSIC_INTENT);//更改圖片remoteView.setImageViewResource(R.id.image_control, R.drawable.pause_over);/*//更新標誌isPlaying=false;*/}else {//沒有播放音樂//試圖播放音樂intent.setAction(PLAYMUSIC_INTENT);//更改圖片remoteView.setImageViewResource(R.id.image_control, R.drawable.play_over);/*//更新標誌isPlaying=true;*/}//發送廣播,更新ActivityPendingIntent pendingIntent=PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);remoteView.setOnClickPendingIntent(R.id.image_control, pendingIntent);}//廣播接收器(接收通知發送的廣播事件)private class MyBroadCastRecever extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction()==PLAYMUSIC_INTENT) {//通知端播放音樂//播放音樂playMusic();//是否播放現正播放音樂標誌isPlaying=true;//更改圖片標誌imageView.setImageResource(R.drawable.pause_over);}else if(intent.getAction()==PAUSEMUSIC_INTENT){//通知端暫停音樂//暫停音樂pauseMusic();//是否播放現正播放音樂標誌isPlaying=false;//更改圖片標誌imageView.setImageResource(R.drawable.play_over);}//上面更新活動的資訊,這時又要發送通知activitySendNotification();}}/** * 暫停播放音樂 */protected void pauseMusic() {if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {mediaPlayer.pause();}//暫停發送通知if (timer!=null) {timer.cancel();timer=null;}}@Overrideprotected void onDestroy() {super.onDestroy();this.unregisterReceiver(recever);//釋放資源if (mediaPlayer!=null) {mediaPlayer.release();mediaPlayer=null;}//是否通知欄notificationManager.cancel(NOTIFICATION_ID);}}




notification中使用pendingintent回到activity,為何是的新建立的ac

你可以在manifest中的設定singleTop或者singleTask,可以避免建立新的activity
 
android開發 通過點擊Notification開啟一個activity, 該activity繼承自TabActivity

在PendingIntent設定intent的時候,可以在intent中添加bundle資料進去的,然後你要啟動的TabActivity中的onstart方法中讀取該資料,然後設定當前tab
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.