Android notification

Android notification非常使用,具体如下

1)效果图如下

1.进入系统获取如下界面


2. 选择"上海"通知栏显示如图


3.下拉通知栏获取如下图片


4.单机通知,跳转Activity获取如下效果图(注意通知栏中的通知消失了)


2)关键代码如下

1. 修改MainActivity.java代码如下

package com.example.androidapp;

import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends Activity {

	private Spinner spinner1=null;
	private NotificationManager notificationManager=null;
	private String[] cities=new String[]{"北京","上海","深圳","广州","杭州","苏州"};
	private ArrayAdapter<String> adapter=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/*初始化NotificationManager对象*/
		notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
		/*
		 * 1)绑定Spinner
		 * 2)当选择别的选项(城市)触发事件
		 * */
		spinner1=(Spinner)findViewById(R.id.spinner1);
		adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item,cities);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinner1.setAdapter(adapter);
		spinner1.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
				String textString=parent.getSelectedItem().toString();
				setNotification(textString);
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
				
			}
		});
	}
	/*发出Notification的方法*/
	private void setNotification(String textString){
		/* 1)创建新的Intent,当单机Notification时调用新的Activity
		 * 2)创建Bundle对象,并将要传递的数据传入
		 * 3)将Bundle对象分配给Intent
		 * 4)请注意,如果要以该Intent启动一个Activity,一定要设置 Intent.FLAG_ACTIVITY_NEW_TASK 标记。
		 * Intent.FLAG_ACTIVITY_CLEAR_TOP :如果在当前Task中,有要启动的Activity,
		 * 那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例
		 * Intent.FLAG_ACTIVITY_NEW_TASK :
		 * 系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task,
		 * 若有,则在该Task上创建Activity,若没有则新建具有该Activity属性的Task,并在该新建的Task上创建Activity
		 * */
		Intent intent=new Intent(MainActivity.this,TestActivity.class);
		Bundle bundle =new Bundle();
		bundle.putString("city", textString);
		intent.putExtras(bundle);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
		
		/* PendingIntent 为Intent的包装,这里是启动Intent的描述,PendingIntent.getActivity 返回的PendingIntent表示,
		 * 此PendingIntent实例中的Intent是用于启动 Activity 的Intent。
		 * PendingIntent.getActivity的参数依次为:Context,发送者的请求码(可以填0),用于系统发送的Intent,标志位。
		 * 其中 PendingIntent.FLAG_UPDATE_CURRENT  表示如果该描述的PendingIntent已存在,
		 * 则改变已存在的PendingIntent的Extra数据为新的PendingIntent的Extra数据。
		 * */
		PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
		/* 1)创建Notification
		 * 2)icon 通知图标
		 * 3)tickerText 状态栏显示的通知文本提示
		 * 4)when 时间
		 * */
		int icon=R.drawable.ic_launcher;
		String tickerText=textString;
		long when=System.currentTimeMillis();
		Notification notification=new Notification(icon, tickerText, when);
		/*当用户点击Clear之后,能够清除该通知*/
		notification.flags=Notification.FLAG_AUTO_CANCEL;
		
		/*设置显示在通知下拉框中的信息*/
		notification.setLatestEventInfo(MainActivity.this, "所选城市", textString, pendingIntent);
		/*启动Notification*/
		notificationManager.notify(0, notification);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

2.创建Activity TestActivity.java具体代码如下

package com.example.androidapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.Toast;

public class TestActivity extends Activity {

	private TextView textView1=null;
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_test);
	    textView1=(TextView)findViewById(R.id.textView1);
	    /* 1) 获取Intent中的Bundle对象
	     * 2) 获取Bundle对象中的数据
	     * */
	    Bundle bundle=this.getIntent().getExtras();
	    String cityString=bundle.getString("city");
	    textView1.setText(cityString);
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode==KeyEvent.KEYCODE_BACK) {
			/*退出程序*/
			this.finish();
		}
		return super.onKeyDown(keyCode, event);
	}
}


相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页