(内容来自《Android第一行代码(第二版)》)
本文目录
1. 通知的使用
2. 调用摄像头和相册
3. 播放多媒体文件
分割线
1. 通知的使用
简介:
通知( Notification )是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。Android的通知功能获得了大量用户的认可和喜爱,就连iOS系统也在5.0版本之后加人了类似的功能。
创建通知首先需要一个NotificationManager
来对通知进行管理,可以调用Context的getSystemService()方法获取到。
getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE即可。因此,获取NotificationManager的实例就可以写成:
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
接下来需要使用一个Builder
构造器来创建Notification对象,但问题在于,几乎Android系统的每一个版本都会对通知这部分功能进行或多或少的修改,API不稳定性问题在通知上面突显得尤其严重。那么该如何解决这个问题呢?其实解决方案我们之前已经见过好几回了,就是使用support库中提供的兼容API。support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有Android系统版本上都能正常工作了,代码如下所示:
Notification notification =new NotificationCompat.Builder(context).build();
当然,上述代码只是创建了一个空的Notification对象,并没有什么实际作用,我们可以在最终的build()方法之前连缀任意多的设置方法来创建一个丰富的Notification对象,先来看一些最基本的设置:
Notification notification = new NotificationCompat.Builder( context )
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.small_icon)
.setLargeIcon( BitmapFactory.decodeResource(getResources(),R.drawable.large_icon))
.build();
上述代码中一共调用了5个设置方法,下面我们来一一解析一下。
setContentTitle()
方法用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。
setContentText()
方法用于指定通知的正文内容,同样下拉系统状态栏就可以看到这部分内容。
setWhen()
方法用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上。
setSmallIcon()
方法用于设置通知的小图标,注意只能使用纯alpha图层为图片进行设置,小图标会显示在系统状态栏上。
setLargeIcon()
方法用于设置通知的大图标,当下拉系统状态栏时,就可以看到设置的大图标了。
以上工作都完成之后,只需要调用NotificationManager的notify()
方法就可以让通知显示出来了。
notify()方法接收两个参数
第一个参数
是id,要保证为每个通知所指定的id都是不同的。
第二个参数
则是Notification对象,这里直接将我们刚刚创建好的Notification对象传入即可。
因此,显示一个通知就可以写成:
manager.notify(1, notification);
到这里就已经把创建通知的每一个步骤都分析完了,下面就让我们通过一个具体的例子来看看通知到底是长什么样的。
-
新建一个NotificationTest项目,并修改activity_main.xml中的代码,如下所示
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/send_notice"
android:text="Send notice"/>
</LinearLayout>
布局中只有一个Send notice按钮,用于发出一条通知
-
修MainActivity中的代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendNotice = (Button) findViewById(R.id.send_notice);
sendNotice.setOnClickListener(this);
}
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.send_notice:
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.build();
manager.notify(1,notification);
break;
default:
break;
}
}
}
这里我们在Send notice按钮的点击事件里完成了通知的创建工作,创建的过程正如前面所描述的一样,现在我们来运行一下程序:

点击按钮然后下拉状态栏就会看到通知信息。
网友评论