一、使用通知
1、使用场景:
当某个应用希望向用户发出一些提示信息,而该程序又不在前台运行时,就可借助通知来实现。
2、用法:
可在活动、广播和服务中创建。
a.基本用法
//原理和传感器类似,都是先获取传感器管理器,然后启动一个传感器。
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//第二个参数指定通知的ticker内容,当通知被创建时,它会在状态栏上一闪而过,属于一种瞬时的提示消息。第三个参数用于指定通知被创建的时间,已毫秒为单位。
Notification nf = new Notification(R.drawable.aa, "瞬时消息", System.currentTimeMillis());
//当最后一个参数PendingIntent为null时,点击通知没反应。PendingIntent与Intent区别:Intent倾向于立即执行某个动作,而PendingIntent
//更倾向于在某个合适的时机去执行某个动作。PendingIntent用法:getActivity()、getBroadcast()、getService();第二个参数一般传0,第四
//个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT 和FLAG_UPDATE_CURRENT这四
//种值可选
nf.setLatestEventInfo(getApplicationContext(), "标题", "内容", null);
//第一个参数指定一个唯一的id,当关闭通知时需要用到此id
nm.notify(1, nf);
//取消通知
nm.cancel(1);
b.高级技巧
1)Notification.sound属性可以在通知发出时播放一段视频。
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/Basic_tone.ogg"));
notification.sound = soundUri;
2)还可让手机振动,是用的是Notification.vibrate这个属性。它是一个长整型数组,用于设置手机静止和振动的时长,以毫秒为单位。下标为0的值表示手机静止的时长,下标为1的值表示手机振动的时长,下标为2的值又表示手机静止的时长,以此类推。下面代码实现通知来时立刻振动1秒,静止1秒,再振动1秒:
long[] vibrates = {0, 1000, 1000, 1000};
notification.vibrate = vibrates;
不过,想要控制手机振动需要声明权限。
<uses-permission android:name="android.permission.VIBRATE" />
3)控制LED灯:ledARGB控制LED灯的颜色;ledOnMS:指定LED灯亮起的时长,以毫秒为单位;ledOffMS:指定LED暗去的时长,以毫秒为单位。flag用于指定通知的一些行为。以下可实现LED灯以绿色的灯光一闪一闪的效果:
notification.ledARGB = Color.GREEN;
notification.ledOnMS = 1000;
notification.ledOffMS = 1000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
二、接受和发送短信
1、接受短信
接收到一条短信时,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED的广播,这条广播里携带着与短信相关的所有数据。
Bundle bundle = intent.getExtras();
//提取短信消息
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
//获取发送方号码
String address = messages[0].getOriginatingAddress();
String fullMessage = "";
for (SmsMessage message : messages) {
// 获取短信内容
fullMessage += message.getMessageBody();
}
sender.setText(address);
content.setText(fullMessage);
注册广播
receiveFilter = new IntentFilter();
receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
messageReceiver = new MessageReceiver();
registerReceiver(messageReceiver, receiveFilter);
2、拦截短信
屏蔽系统短信程序,使得只有我们的应用才能接受到短信。当然是使用有序广播了。
首先需要提高我们的优先级,让它能优先于系统短信程序接收到短信广播:
receiveFilter.setPriority(100);
然后停止广播的传播:
abortBroadcast();
3、发送短信
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("接收人的手机号", null, "短信内容", null, null);
需要声明权限:
<uses-permission android:name="android.permission. SEND_SMS" />
发送短信的第四个参数用于对短信的发送状态进行监控:
sendFilter = new IntentFilter();
sendFilter.addAction("SENT_SMS_ACTION");
sendStatusReceiver = new SendStatusReceiver();
registerReceiver(sendStatusReceiver, sendFilter);
Intent sentIntent = new Intent("SENT_SMS_ACTION");
PendingIntent pi = PendingIntent.getBroadcast
(MainActivity.this, 0, sentIntent, 0);
smsManager.sendTextMessage(to.getText().toString(), null,
msgInput.getText().toString(), pi, null);
class SendStatusReceiver extends BroadcastReceiver {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onReceive(Context context, Intent intent) {
<span style="white-space:pre"> </span>if (getResultCode() == RESULT_OK) {
<span style="white-space:pre"> </span>// 短信发送成功
<span style="white-space:pre"> </span>Toast.makeText(context, "Send succeeded",
<span style="white-space:pre"> </span>Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>// 短信发送失败
<span style="white-space:pre"> </span>Toast.makeText(context, "Send failed",
<span style="white-space:pre"> </span>Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
每条短信长度不超过160个字符,要发送超长短信,用sendMultipartTextMessage()。
三、调用摄像头和相册
用到再百度吧。
四、播放多媒体文件
1、播放音频
MediaPlayer类。记得要先prepare()再start()播放。记得释放stop()、release()。
2、播放视频
VideoView类。