欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>