利用android的"通知Notification"来实现msn的登录状态

       Notification,状态栏。看得出来就是和我们PC机一样,在某一区域有个标志,需要请求它就去点这个标志就可以打开这个程序了。

       先来介绍下需要用到的一些属于android下的类:IntentNotificationManagerPendingIntentSpinner

            1.Intent

        我们在开发web项目的时候,总是从这个页面跳转到另一个页面,而且需要从这个页面带必要的值到那个页面。其实Intent就是实现这样的功能。

        在Intent中,分为隐式和显示。简单的说一下吧,隐式就是Intent的动作(action)、类(category)等不是直接的,而是在manifestAndroid.xml中的Intent-filter下注明Intent的动作(action)、类(category),在java代码中对Intent进行设置动作和类;而显示就是直接在Intent中设置跳转的方向。(说的很大概)。

        2.NotificationManager

            通知的设置等操作相对比较简单,基本的使用方式就是用新建一个Notification对象,然后设置好通知的各项参数,然后使用系统后台运行的NotificationManager服务将通知发出来。

            实现的步骤如下:       

          1)得到NotificationManager:

          2)创建一个新的Notification对象:

          3)填充Notification的各个属性:

          3.PendingIntent

           PendingIntent为Intent的包装,这里是启动Intent的描述,PendingIntent.getActivity 返回的PendingIntent表示,此PendingIntent实例中的Intent是用于启动 Activity 的Intent。PendingIntent.getActivity的参数依次为:Context,发送者的请求码(可以填0),用于系统发送的Intent,标志位。

其中 PendingIntent.FLAG_UPDATE_CURRENT  表示如果该描述的PendingIntent已存在,则改变已存在的PendingIntent的Extra数据为新的PendingIntent的Extra数据。

这里再简要说一下 Intent PendingIntent的区别:

           Intent:意图,即告诉系统我要干什么,然后系统根据这个Intent做对应的事。如startActivity相当于发送消息,而Intent是消息的内容。

           PendingIntent:包装Intent,Intent 是我们直接使用 startActivity , startService 或 sendBroadcast 启动某项工作的意图。而某些时候,我们并不能直接调用startActivity , startServide 或 sendBroadcast ,而是当程序或系统达到某一条件才发送Intent。如这里的Notification,当用户点击Notification之后,由系统发出一条Activity 的 Intent 。因此如果我们不用某种方法来告诉系统的话,系统是不知道是使用 startActivity ,startService 还是 sendBroadcast 来启动Intent的(当然还有其他的“描述”),因此这里便需要PendingIntent

           接下来就来展示利用android的"通知Notification"来实现msn的登录状态

              粘贴下代码吧。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <TextView
  android:id="@+id/textview01" 
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="当前状态" />
 <Spinner
  android:id="@+id/spinner"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerHorizontal="true"
  android:layout_toRightOf="@id/textview01" />
</LinearLayout>


second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <TextView
  android:id="@+id/textview01" 
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
</LinearLayout>

 

MainActivity类

public class MainActivity extends Activity {
 private Spinner mSpinner;
 private String[] data = {"离线","在线","忙碌","离开"};
 private ArrayAdapter<String> mAdapter;
 //声明通知(消息)管理器
 private NotificationManager mNotificationManager;
 //声明Notification对象
 private Notification mNotification;
 private PendingIntent mPendingIntent;
 private Intent mIntent;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //初始化NotificationManager对象
        mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
       
        mSpinner = (Spinner)findViewById(R.id.spinner);
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
        mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinner.setAdapter(mAdapter);
       
        //点击通知时转移内容
        mIntent = new Intent(MainActivity.this, MainActivity.class);
        //主要是设置点击通知时显示内容的类
        mPendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0);
        //构造Notification对象
        mNotification = new Notification();
        mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> arg0, View arg1,
     int arg2, long arg3) {
    //设置通知在状态栏显示的图标
    switch (arg2) {
    case 0:
     mNotification.icon = R.drawable.offine;
     break;
    case 1:
     mNotification.icon = R.drawable.msn;
     break;
    case 2:
     mNotification.icon = R.drawable.busy;
     break;
    case 3:
     mNotification.icon = R.drawable.away;
     break;
    }
    //当我们点击通知时显示的内容
//    mNotification.tickerText = "MSN登入状态" + data[arg2];
    //通知时发出默认的声音
    mNotification.defaults = Notification.DEFAULT_SOUND;
    //设置通知显示的参数
    mNotification.setLatestEventInfo(MainActivity.this, "MSN登入状态", data[arg2], mPendingIntent);
    //可以理解为执行这个通知
    mNotificationManager.notify(0, mNotification);
   }

   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
    
   }
  });
    }
}

 

SecondActivity类

public class SecondActivity extends Activity{

 private TextView mTextView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.second);
  
  mTextView = (TextView)findViewById(R.id.textview01);
  mTextView.setText("在线");
 }
}

运行的最终结果如下(从程序的开始到最后的每一个步骤):

选择状态,跳出下拉框

选择你需要的状态,注意手机的状态

退回到主页,为了是展示notification的功能

再选择msn登录状态

好了,整个过程就是这样的。还有不懂的吗?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值