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

(一)通知的用法

  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. HashMap与HashTable原理及数据结构

    HashMap与HashTable原理及数据结构 hash表结构个人理解 hash表结构,以计算出的hashcode或者在hashcode基础上加工一个hash值,再通过一个散列算法 获取到对应的数组 ...

  2. iframe定位获取

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Hibernate一对多映射列表实例(使用xml文件)

    如果持久化类具有包含实体引用的列表(List)对象,则需要使用一对多关联来映射列表元素. 在这里,我们使用论坛应用场景,在论坛中一个问题有多个答案. 在这种情况下,一个问题可以有多个答案,每个答案可能 ...

  4. python 反射机制 ( 广泛应用于URL参数)

    web实例 考虑有这么一个场景,根据用户输入的url的不同,调用不同的函数,实现不同的操作,也就是一个url路由器的功能,这在web框架里是核心部件之一.下面有一个精简版的示例: 首先,有一个comm ...

  5. 通信协议之广播---recvfrom 放回客户端的ip地址第一次全为0.0.0.0

    遇到一个很恶心的问题. while(1) { recvfrom(sockfd, readbuff, UDP_CMD_BUFF_LENGTH - 1, 0, (struct sockaddr *)&am ...

  6. 添加可点击的imagebottom,有个点击动画效果

    android添加可点击的按钮,有个动画切换 ,首先定义一个 res/drawable中定义一个 btn_shutter_background.xml,其定义举例如下: <?xml versio ...

  7. FTP(File Transfer Protocol)是什么?

    文件传输协议 FTP(File Transfer Protocol),是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).用户可以通过 ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记1.3

    想命令行执行gradle的构建,可以通过提供的gradle wrapper或者安装gradle. 构建android项目不需要安装gradle,因为android studio已经包含gradle.& ...

  9. 在Visual Studio 2015的Cordova项目中使用Gulp

    之前一直是在vs 2013中使用Cordova来开发移动app(目前有iPad版/iPhone版/安卓版),准备到下一个milestone的时候升级到2015,这两天在尝试各种东西. 2015中的co ...

  10. Sublime Text 3如何快速生成HTML5的头部信息和常用的快捷键

    一.快速生成HTML5的头部信息的步骤: 1.Ctrl + N,新建一个文档: 2.Ctrl + Shift + P,打开命令模式,再输入 sshtml 进行模糊匹配,将语法切换到html模式: 3. ...