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; } }
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); } }