手機有未接來電或未讀簡訊時在通知欄就可以有一個狀態,下拉後點擊相應條目就可以進入此條目,同時通知欄上的此條資訊消失,其實實現起來並不難,通過一個notification和notificationmanager即可
我下面一個activity和一個intentservice實現,類比下載程式:
源碼如下:
package com.example.activity;
import com.example.service.IntentServiceDemo;
import android.os.Bundle;
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity {
@Override
protected void onStart()
{
//點擊bar跳轉後bar消失,由於oncreate只有在建立時才條用故放在此方法中
super.onStart();
NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.cancel(R.layout.main);
}
Button btn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{//點擊按鈕跳轉至service,記得要在manifest檔案中聲明一下
Intent intent=new Intent(Main.this,IntentServiceDemo.class);
startService(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
點擊按鈕觸發intentservice服務,
注意到通知欄出現開始下載條目,5s過後下載完畢
返回主菜單拉下通知欄
點擊條目可以來到main,同時通知欄中的條目消失
========================================
package com.example.service;
import com.example.activity.*;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.util.Log;
public class IntentServiceDemo extends IntentService
{
//需要一個空的構造方法,繼承父類的名字
public IntentServiceDemo()
{
super("IntentServiceDemo");
}
@Override
//重寫onhandleintent方法
protected void onHandleIntent(Intent intent)
{
Log.i("TAG","開始下載");
//調用此函數 激發下載進程
showNotification(true);
try
{
//進程休眠5s,類比下載過程
Thread.sleep(5000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//下載完畢,再次調用
showNotification(false);
Log.i("TAG","下載完畢");
}
private void showNotification(boolean b)
{
Notification notification;//聲明一個notification
Intent intent=new Intent(this,Main.class);
//pendingintent中封裝了intent,跳轉到Main
PendingIntent contentIntent=PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);//擷取一個notificationmanager
if (b)//如果b為真表示還未下載成功開始下載
{//三個參數分別為表徵圖、標題、開始時間
notification=new Notification(R.drawable.ok, "開始下載", System.currentTimeMillis());
//下拉通知欄後顯示的資訊,點擊後執行contentintent
notification.setLatestEventInfo(this, "下載", "正在下載…", contentIntent);//使用者點擊時運行contentintent
}else//否則為假 表示下載完畢
{
notification=new Notification(R.drawable.ok, "下載完畢", System.currentTimeMillis());
notification.setLatestEventInfo(this, "下載", "下載完畢!", contentIntent);
//可以指定通知的方式,如鈴聲、震動、LED彩燈等
//notification.defaults=Notification.DEFAULT_LIGHTS;
//notification.defaults=Notification.DEFAULT_SOUND;
}
//下載完畢後通知,參數為一個id(唯一),這裡可以指定為R.layout.main,但前後要保持一致;另一個用來指定notification
nm.notify(R.layout.main, notification);//id唯一的
}
}