利用android的"通知Notification"来实现msn的登录状态
2011-08-02 17:32
531 查看
Notification,状态栏。看得出来就是和我们PC机一样,在某一区域有个标志,需要请求它就去点这个标志就可以打开这个程序了。
先来介绍下需要用到的一些属于android下的类:Intent、NotificationManager、PendingIntent、Spinner。
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登录状态
好了,整个过程就是这样的。还有不懂的吗?
先来介绍下需要用到的一些属于android下的类:Intent、NotificationManager、PendingIntent、Spinner。
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登录状态
好了,整个过程就是这样的。还有不懂的吗?
相关文章推荐
- Android入门(43)——第五章 使用Notification实现状态通知栏的通知
- android的几种“通知”方式简单实现(Notification&NotificationManager)
- 【Android】使用Notification实现状态通知栏的通知
- Android基础学习总结(十二)——利用Bmob实现用户账户体系(注册、登录、验证等)
- Android-Notification (通知实现)
- Android通知栏实现APP下载更新(DownloadManager和自定义Notification2种方式实现)
- android:Notification实现状态栏的通知
- Android平台利用ShareSDK组件实现 第三方登录
- android利用爬虫实现模拟登录
- Android实习02:"摇一摇"功能的实现
- Android中使用Notification实现宽视图通知栏(Notification示例二)
- Android 利用httpclient进行网络通信,实现用户登录的方法
- 利用"animateWithDuration"实现带弹簧动画的顶部通知栏
- android Notification的自定义和实现通知栏的展开和收起
- Android利用CountDownTimer实现倒计时功能 Android实现停留5s跳转到登录页面
- 利用MediaPlayer来实现Notification通知铃声
- Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)
- Android通知栏实现APP下载更新(DownloadManager和自定义Notification2种方式实现)
- Android Service检查Wifi状态并用notification通知
- Android开源代码解读-基于SackOfViewAdapter类实现类似状态通知栏的布局