当某个应用希望向用户发出一些提示信息,而该程序又不在前台运行时,就可借助通知来实现。
可在活动、广播和服务中创建。
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;
接收到一条短信时,系统会发出一条值为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);
屏蔽系统短信程序,使得只有我们的应用才能接受到短信。当然是使用有序广播了。
首先需要提高我们的优先级,让它能优先于系统短信程序接收到短信广播:
receiveFilter.setPriority(100);然后停止广播的传播:
abortBroadcast();
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()。
用到再百度吧。
MediaPlayer类。记得要先prepare()再start()播放。记得释放stop()、release()。
VideoView类。