• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android中接收系统广播消息

Android中接收系统广播消息

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 消息推送,android通知栏消息,android 消息机制,android消息推送机制,android 消息队列等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android中接收系统广播消息


Android的大量系统事件都会对外发送标准广播:

创建广播Action常量:

ACTION_TIME_CHANGED系统时间被改变

ACTION_DATE_CHANGED系统日期被改变

ACTION_TIMEZONE_CHANGED系统时区被改变

ACTION_BOOT_COMPLETED系统启动完成

ACTION_PACKAGE_ADDED系统添加包

ACTION_PACKAGE_CHANGED系统的包改变

ACTION_PACKAGE_REMOVED系统的包被删除

ACTION_PACKAGE_RESTARTED系统的包数据被重启

ACTION_PACKAGE_DATA_CLEARED系统的包数据被清空

ACTION_BATTERY_CHANGED电池电量改变

ACTION_BATTERY_LOW电池电量低

ACTION_POWER_CONNECTED系统连接电源

ACTION_POWER_DISCONNECTED系统与电源断开

ACTION_SHUTDOWN系统被关闭

1,开机自启动的Service

我们经常会有这样的应用场合,比如消息推送服务,需要实现开机启动的功能。

例如,监听用户来电,监听用户短信,拦截黑名单电话等
为了让Service随应系统启动自动执行,可以让BroadcastReceiver监听Action为ACTION_BOOT_COMPLETED常量的Intent,然后在BroadcastReceiver中启动特定的Service

LaunchReceiver.java

public class LaunchReceiver extends BroadcastReceiver {
    /*
     * 开机自启动的Service:
     * 例如,监听用户来电,监听用户短信,拦截黑名单电话等
     * 为了让Service随应系统启动自动执行,可以让BroadcastReceiver监听Action为ACTION_BOOT_COMPLETED常量的Intent,然后在BroadcastReceiver中启动
     * 特定的Service
     * 
     *
     * */
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
            Intent intent_to_service=new Intent(context,LaunchService.class);
            context.startService(intent_to_service);//广播里启动特定的Service
	}

}
LaunchService.java
public class LaunchService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	//Service被创建时回调该方法,可开发任意Service,监听用户来电,监听用户短信,拦截黑名单电话等等
	public void onCreate()
	{
		/*// 定义1秒执行一行输出
		new Timer().schedule(new TimerTask()
		{

			@Override
			public void run()
			{
				System.out.println("-----"
					+ new Date() + "-----");
			}
		}, 0, 1000);*/
		Toast.makeText(this, "系统已开机", Toast.LENGTH_LONG).show();
	}
}

        
            
                
            
        
        

    

2,短信提醒,系统接收到短信时,发送广播,在系统接收到短信之前,激发Broadcast

 

当系统收到短信时,系统会对外发出一个有序广播,该广播的Intent对应的Action为android.provider.Telephony.SMS_RECEIVED
因此只要在程序中开发一个对应的BroadcastReceiver即可监听到系统收到短信
SmsReceiver.java

package com.hust.smsreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
/*
 * 短信提醒:
 * 当系统收到短信时,系统会对外发出一个有序广播,该广播的Intent对应的Action为android.provider.Telephony.SMS_RECEIVED
 * 因此只要在程序中开发一个对应的BroadcastReceiver即可监听到系统收到短信
 * */
public class SmsReceiver extends BroadcastReceiver {
    //当系统接收到短信是被触发,就是在系统自带的短信接收程序之前被触发,相当于拦截短信
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
       //如果接收到短信
		if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
			/*在系统短信接收程序之前会被启动,如果取消广播,那么短信广播将不会被传播到系统的短信接收程序,也就是系统本身将不会收到短信*/
			//abortBroadcast();//取消广播,这行代码会让系统收不到短信
			StringBuilder sb=new StringBuilder();
			//短信数据捆绑在intent的Bundle中
			Bundle bundle=intent.getExtras();
			if(bundle!=null){
				//通过pdus可以获得接收到的所有短信消息
				Object[]  pdus=(Object[]) bundle.get("pdus");
				//构建短信对象数组
				SmsMessage[] messages=new SmsMessage[pdus.length];
				for(int i=0;i<=pdus.length;i++){
					//根据pdus,把每个pdus转换成短信对象SmsMessage
					messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]);
				}
				for(SmsMessage message:messages){
					sb.append("短信来源:");
					sb.append(message.getDisplayOriginatingAddress());//获取短信的源地址
					sb.append("\n----短信内容-----\n");
					sb.append(message.getDisplayMessageBody());//获取短信的内容
				}
			}
			Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();//toast消息提示
		}
	}

}


            
                
            

3,电量变化

如果我们阅读软件,可能是全屏阅读,这个时候用户就看不到剩余的电量,我们就可以为他们提供电量的信息。要想做到这一点,我们需要接收一条电量变化的广播,然后获取百分比信息,这听上去挺简单的

当手机电量发生改变是,系统会对外发送Intent的ActionACTION_BATTERY_CHANGED的常量的广播,
当手机电量过低时,会发送ACTION_BATTERY_LOW常量的广播

package com.hust.batteryreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class BatteryReceiver extends BroadcastReceiver {
/*当手机电量发生改变是,系统会对外发送Intent的ActionACTION_BATTERY_CHANGED的常量的广播,
 * 当手机电量过低只,会发送ACTION_BATTERY_LOW常量的广播
 * 
 * */
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
        Bundle bundle=intent.getExtras();
        int current=bundle.getInt("level");//key=level是当前电量
        int total=bundle.getInt("scale");//key=scale是总电量
        //当前电量小于总电量的15%
        if(current*1.0/total<0.15){
        	Toast.makeText(context, "电池电量过低,请尽快充电!", Toast.LENGTH_LONG).show();
        }
	}

}

            
                
            
        

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 几种消息推送方案总结,android方案
  • android的消息提示(震动与提示音),android
  • Android中接收系统广播消息

相关文章

  • 2017-05-26Android 高仿华为手机Tab页滑动导航效果
  • 2017-05-26Linux常用命令-50:crontab命令
  • 2017-05-26Android开源项目分类汇总(六)工具库
  • 2017-05-26我的android学习经历8,android学习经历8
  • 2017-05-26实现图片拖动,图片拖动
  • 2017-05-26手动获取判断处理权限,获取判断权限
  • 2017-05-26Android 面试题--Activity,android--activity
  • 2017-05-26活动的生命周期(三):实例上机课,生命周期上机
  • 2017-05-26Android Activity生命周期与启动模式,androidactivity
  • 2017-05-26Android在onCreate()方法中可以获取到宽高等信息

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Kotlin操作符重载:把标准操作加入到任何类中(KAD 17),kotlinkad
    • 2.4.6 BaseAdapter优化
    • Android 实用代码片段,
    • Android--Activity四种启动模式
    • Android 缓存类LruCache源码分析
    • React Native控件之PullToRefreshViewAndroid下拉刷新组件讲解
    • 【方法总结】创建、读取、删除文件相关操作,读取删除文件
    • android拦截短信并屏蔽系统的Notification,gsm短信拦截系统
    • android开发之路05,android之路05
    • DB2_Tips_Tricks_04 远程数据库之间复制数据

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有