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

(一)通知的用法

  1、通知的基本用法

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

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

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/sent_notice_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送通知" /> </LinearLayout>

  (2)MainActivity:

 import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Button sendNoticeBtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button sendNoticeBtn = (Button) findViewById(R.id.sent_notice_btn);
sendNoticeBtn.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sent_notice_btn:
// 1.通过getSystemService方法创建NotificationManager实例
NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 2.创建Notification实例,它是在屏幕上方一闪而过的那种通知信息
// 第一个参数表示图标,第二个参数表示通知内容,第三个参数用于指定通知被创建的时间,当下拉状态时,这个时间会显示在对应的通知上
Notification notification = new Notification(
R.drawable.ic_launcher, "您有一条通知",
System.currentTimeMillis()); // 3.对下拉状态栏后显示的通知的布局进行设定
// 第一个参数表示context上下文,第二个参数表示通知的标题,第三个参数表示通知的内容,第四个参数表示点击通知后的行为,这里先传入null
notification.setLatestEventInfo(this, "这是通知标题", "这是通知内容", null); // 4.使用NotificationManager的notify方法让通知显示出来
// 第一个参数:通知的id,具有唯一性;第二个参数:Notification对象
mgr.notify(1, notification);
break; default:
break;
}
}
}

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

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

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是通知跳转的页面" /> </LinearLayout>

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

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

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

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

  (4)最后注册NotificationActivity活动。

  3、通知的高级技巧

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

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

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

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

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

  (3)控制LED灯亮

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

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

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

随机推荐

  1. inode表元数据,存储在物理存储体上

    一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规.目录.符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看到的那些信息,这些信息存在inode中而不是 ...

  2. python第二周数据类型 字符编码 文件处理

    第一数据类型需要学习的几个点: 用途 定义方式 常用操作和内置的方法 该类型总结: 可以存一个值或者多个值 只能存储一个值 可以存储多个值,值都可以是什么类型 有序或者无序 可变或者不可变 二:数字整 ...

  3. 虚拟机设置bios第一启动为u盘

    虚拟机可以用u盘启动吗?虚拟机如何设置u盘启动?今天u启动小编亲自为大家编写u启动制作的u盘启动盘在虚拟机中的进入u盘启动的教程: 总共三步骤:安装创建虚拟机和准备u启动u盘 - 虚拟机添加u盘设备  ...

  4. python之函数enumerate()

    enumerate函数可以遍历列表 for i in range(len(a)): print a[i] 等价于: for index,item in enumerate(a): print inde ...

  5. antd拖拽排序

    https://segmentfault.com/a/1190000004006185?_ea=457266 https://react-dnd.github.io/react-dnd/

  6. spring cloud 订单调用用户

    下面实现一个订单调用用户实现例子,使用技术只要是spring,为以后操作负载打基础.(基于昨天别人问我的基础上做了实例供大家参考) 1.用户工程截图 : 2.用户工程启动类 3.用户工程控制类 4. ...

  7. ADODB

    转自网友,看着挺全就转了,供大家学习研究. Recordset 对象的属性1.CursorType 属性AdOpenForwardOnly: 仅向前游标,默认值.除了只能在记录中向前滚动外,与静态游标 ...

  8. Object类有哪些公用方法?

    Object是所有类的父类,任何类都默认继承Object. clone 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedExce ...

  9. 关于webpack打包js和css

    废话不多说,直接贴出代码,大家瞅瞅:其中要引用css的话是要用css-loader.用了之后再webpack.config.js里面配置相应的代码,并且在相应的js文件里面引用即可啦,不知道有哪位大神 ...

  10. POJ 2485 Highways【最小生成树最大权——简单模板】

    链接: http://poj.org/problem?id=2485 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...