Android開發筆記——通知欄設定

來源:互聯網
上載者:User

    手機有未接來電或未讀簡訊時在通知欄就可以有一個狀態,下拉後點擊相應條目就可以進入此條目,同時通知欄上的此條資訊消失,其實實現起來並不難,通過一個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唯一的
}

}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.