NotificationManager与Notification的应用
程序员文章站
2022-07-14 17:43:55
...
本博客内容选摘自《Google Android SDK 开发范例大全》第五章第8节(第170页),如需详细了解请查看原书籍
下面通过模拟MSN在线状态的切换,在切换状态时改变状态栏上的状态小图标和提示文本的示例来学习NotificationManager与Notification的应用。
代码如下:
StateBarNotifyActivity.java
package com.st;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class StateBarNotifyActivity extends Activity {
private NotificationManager nm = null;
private Spinner spinner = null;
private ArrayAdapter<String> adapter = null;
private static final String ONLINE="在线";
private static final String BUSY="忙碌";
private static final String AWAY="离开";
private static final String OFFLINE="离线";
private static final String[]stateList = {ONLINE,BUSY,AWAY,OFFLINE};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner = (Spinner)findViewById(R.id.spinner);
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, stateList);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Log.i("OnItemSelectedListener", "position="+position+", id="+id);
if(stateList[position].equals(ONLINE)){
setNotifyType(R.drawable.online,ONLINE);
}else if(stateList[position].equals(BUSY)){
setNotifyType(R.drawable.busy,BUSY);
}else if(stateList[position].equals(AWAY)){
setNotifyType(R.drawable.away,AWAY);
}else if(stateList[position].equals(OFFLINE)){
setNotifyType(R.drawable.offline,OFFLINE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
/**
* 发出通知
* */
protected void setNotifyType(int statePngId, String showText) {
// TODO Auto-generated method stub
Intent notifyIntent = new Intent(this,NotifyActivity.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pintent = PendingIntent.getActivity(this, 0, notifyIntent, 0);
Notification notification = new Notification();
notification.icon = statePngId;//设置图标
notification.tickerText = showText;//设置文本提示
notification.defaults = Notification.DEFAULT_LIGHTS;//设置默认声音-Notification.DEFAULT_SOUND,还可以是其他的值:屏幕发亮-Notification.DEFAULT_LIGHTS;手机震动-Notification.DEFAULT_VIBRATE;包含以上三种动作-Notification.DEFAULT_ALL
notification.setLatestEventInfo(this, "MSN登录状态", showText, pintent);
//发出通知
nm.notify(0, notification);
}
}
NotifyActivity.java
package com.st;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class NotifyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Toast.makeText(this, "这是模拟MSN登录状态的程序", Toast.LENGTH_LONG).show();
finish();
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</Spinner>
</LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">模拟MSN切换登录状态的程序</string>
<string name="app_name">StateBarNotify</string>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.st"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".StateBarNotifyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NotifyActivity"></activity>
</application>
</manifest>
上一篇: LeetCode9.回文数
下一篇: Android的Menu使用
推荐阅读
-
Javascript新手入门之字符串拼接与变量的应用
-
一个级联菜单代码学习及removeClass与addClass的应用_javascript技巧
-
PHP、Java、C#实现URI参数签名算法,确保应用与REST服务器之间的
-
PHP与已存在的Java应用程序集成_PHP
-
深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
-
Java并发编程Callable与Future的应用实例代码
-
基于C#中IDisposable与IEnumerable、IEnumerator的应用
-
深入理解Java对象的序列化与反序列化的应用
-
深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
-
Notification与NotificationManager详细介绍