$《第一行代码:Android》读书笔记——第8章 通知和手机多媒体

  本章主要介绍了通知、短信、调用摄像头和相册、播放多媒体文件等内容。  

(一)通知的用法

  1、通知的基本用法

  见如下代码(详细操作步骤在代码注释中):

  (1)先创建一个布局文件,其中只有一个名为“发送通知”的Button,当点击这个按钮的时候发送一条通知:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:orientation="vertical" >
 5 
 6     <Button
 7         android:id="@+id/sent_notice_btn"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:text="发送通知" />
11 
12 </LinearLayout>

  (2)MainActivity:

 1 import android.app.Activity;
 2 import android.app.Notification;
 3 import android.app.NotificationManager;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.MenuItem;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 
11 public class MainActivity extends Activity implements OnClickListener {
12 
13     private Button sendNoticeBtn;
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19 
20         Button sendNoticeBtn = (Button) findViewById(R.id.sent_notice_btn);
21         sendNoticeBtn.setOnClickListener(this);
22     }
23 
24     @Override
25     public void onClick(View v) {
26         switch (v.getId()) {
27         case R.id.sent_notice_btn:
28             // 1.通过getSystemService方法创建NotificationManager实例
29             NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
30             
31             // 2.创建Notification实例,它是在屏幕上方一闪而过的那种通知信息
32             // 第一个参数表示图标,第二个参数表示通知内容,第三个参数用于指定通知被创建的时间,当下拉状态时,这个时间会显示在对应的通知上
33             Notification notification = new Notification(
34                     R.drawable.ic_launcher, "您有一条通知",
35                     System.currentTimeMillis());
36             
37             // 3.对下拉状态栏后显示的通知的布局进行设定
38             // 第一个参数表示context上下文,第二个参数表示通知的标题,第三个参数表示通知的内容,第四个参数表示点击通知后的行为,这里先传入null
39             notification.setLatestEventInfo(this, "这是通知标题", "这是通知内容", null);
40             
41             // 4.使用NotificationManager的notify方法让通知显示出来
42             // 第一个参数:通知的id,具有唯一性;第二个参数:Notification对象
43             mgr.notify(1, notification);
44             break;
45 
46         default:
47             break;
48         }
49     }
50 }

  2、为通知加上点击跳转功能(使用PendingIntent)

  (1)在以上代码的基础上,再创建另一个xml文件,作为点击通知后跳转到的页面:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="这是通知跳转的页面" />
11 
12 </LinearLayout>

  (2)创建活动NotificationActivity,在其中调用NotificationManager的cancel方法让状态栏的通知消失:

 1 import android.app.Activity;
 2 import android.app.NotificationManager;
 3 import android.os.Bundle;
 4 
 5 public class NotificationActivity extends Activity {
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_notification);
10 
11         // 用于让状态栏上的通知消失,这里的1就是在MainActivity中创建通知时为通知设置的id
12         NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
13         mgr.cancel(1);
14     }
15 }

  (3)修改MainActivity活动的按钮点击事件:

 1   @Override
 2     public void onClick(View v) {
 3         switch (v.getId()) {
 4         case R.id.sent_notice_btn:
 5             // 1.通过getSystemService方法创建NotificationManager实例
 6             NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
 7 
 8             // 2.创建Notification实例,它是在屏幕上方一闪而过的那种通知信息
 9             // 第一个参数表示图标,第二个参数表示通知内容,第三个参数用于指定通知被创建的时间,当下拉状态时,这个时间会显示在对应的通知上
10             Notification notification = new Notification(
11                     R.drawable.ic_launcher, "您有一条通知",
12                     System.currentTimeMillis());
13 
14             // 3.对下拉状态栏后显示的通知的布局和点击行为进行设定
15             // 第一个参数表示context上下文,第二个参数表示通知的标题,第三个参数表示通知的内容,第四个参数表示点击通知后的行为,这里先传入null
16 
17             // 3.1 创建Intent,用于在点击通知时跳转到NotificationActivity页面:
18             Intent intent = new Intent(MainActivity.this,
19                     NotificationActivity.class);
20             // 3.2 创建PendingIntent
21             PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0,
22                     intent, PendingIntent.FLAG_CANCEL_CURRENT);
23 
24             notification.setLatestEventInfo(this, "这是通知标题", "这是通知内容", pi);
25 
26             // 4.使用NotificationManager的notify方法让通知显示出来
27             // 第一个参数:通知的id,具有唯一性;第二个参数:Notification对象
28             mgr.notify(1, notification);
29             break;
30 
31         default:
32             break;
33         }
34     }

  (4)最后注册NotificationActivity活动。

  3、通知的高级技巧

  (1)在发送通知的时候同时播放一段音频:只用在发送通知按钮的点击事件中加入如下代码:

1        ...
2        // +.在发送通知的时候播放一段音频,这里的路径是手机默认来电铃声
3             Uri soundUri = Uri.fromFile(new File(
4                     "/system/media/audio/ringtones/Basic_tone.ogg"));
5             notification.sound = soundUri;
6 
7             // 4.使用NotificationManager的notify方法让通知显示出来
8             // 第一个参数:通知的id,具有唯一性;第二个参数:Notification对象
9             mgr.notify(1, notification);
        ...

   Tips:用R.E管理器进入/system/media/audio,里面有四个文件夹,分别是alarms(闹钟铃声),notifications(通知即短信铃声),ringtones(来电铃声),ui(一些应用程序操作的效果声音比如拍照等)。

  (2)发送通知时让手机振动:

 1        ...
 2        // +.发送通知时让手机振动:
 3             // 说明:这个数组下标为0的值表示手机静止的时长(毫秒),下标为1的表示振动的时长,下标为2的表示静止的时长,...以此类推
 4             // 让手机振动需要申请权限:<uses-permission
 5             // android:name="android.permission.VIBRATE" />
 6             long[] vibrates = { 0, 1000, 1000, 1000 };
 7             notification.vibrate = vibrates;
 8 
 9             // 4.使用NotificationManager的notify方法让通知显示出来
10             // 第一个参数:通知的id,具有唯一性;第二个参数:Notification对象
11             mgr.notify(1, notification);
12        ...

  (3)控制LED灯亮

 1             ...
 2             // +.发送通知的时候让LED灯亮
 3             notification.ledARGB = Color.GREEN; // 控制亮灯的颜色,一般可以选红绿蓝三种颜色
 4             notification.ledOnMS = 1000; // 灯亮的时长(毫秒)
 5             notification.ledOffMS = 2000; // 灯暗去的时长,在手机在锁屏状态且用户查看通知之前,灯会交替亮、暗下去
 6             notification.flags = Notification.FLAG_SHOW_LIGHTS; // 指定通知的行为,这里是亮灯
7 // 4.使用NotificationManager的notify方法让通知显示出来 8 // 第一个参数:通知的id,具有唯一性;第二个参数:Notification对象 9 mgr.notify(1, notification); 10 ...

  (4)通知的铃声、振动、灯光的设置使用系统默认值:

1             // +.铃声、振动、通知的设置使用系统默认值
2             notification.defaults = Notification.DEFAULT_ALL;

 

posted @ 2016-03-24 14:26  AzureSky  阅读(386)  评论(0编辑  收藏  举报