接收系统广播

1.接受短消息的BroadcastReceiver

public class ShortMessageReceiver extends BroadcastReceiver {
    public static final String TAG="ShortMessageReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Bundle bundle = intent.getExtras();

        if (bundle != null)
        {
            Set<String> keys = bundle.keySet();
            //查看收到的广播中包含哪些数据类型
            for (String key : keys)
            {
                Log.d("key", key);
            }
            //获取收到的短信数据,所有的短信数据都需要通过一个名字为pdus的key获取
            Object[] objArray = (Object[]) bundle.get("pdus");
            //定义封装短信内容的SmsMessage对象数组
            SmsMessage[] messages = new SmsMessage[objArray.length];

            for (int i = 0; i < objArray.length; i++)
            {
                //将短信转换成SmsMessage对象
                messages[i] = SmsMessage.createFromPdu((byte[]) objArray[i]);
                String s = "手机号:" + messages[i].getOriginatingAddress() + "\n";
                s += "短信内容:" + messages[i].getDisplayMessageBody();
                Toast.makeText(context, s, Toast.LENGTH_LONG).show();
            }
        }
    }
}
2.在AndroidManifest.xml中注册

 <receiver
            android:name=".ShortMessageReceiver"
            android:enabled="true"
            android:permission="android.permission.RECEIVE_SMS" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
 </receiver> 
3.在AndroidManifest.xml申请权限

<uses-permission android:name="android.permission.RECEIVE_MMS" />
4.其他Receiver

(1)接听电话

public class InCallReceiver extends BroadcastReceiver {
    public InCallReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context,"接收到广播",Toast.LENGTH_SHORT).show();

        TelephonyManager manager=(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
        switch (manager.getCallState()){
            case TelephonyManager.CALL_STATE_RINGING:
                String number=intent.getStringExtra("incoming_number");
                Toast.makeText(context,"来电:"+number,Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                Toast.makeText(context,"offhook",Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                Toast.makeText(context,"挂断电话",Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}

(2)拨出电话

public class OutCallReceiver extends BroadcastReceiver {
    public OutCallReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Toast.makeText(context,"去电号码:"+number,Toast.LENGTH_SHORT).show();
      }
}
(3)屏幕点亮和熄灭

public class ScreenOnOffReceiver extends BroadcastReceiver {
    public ScreenOnOffReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.

        if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
            Toast.makeText(context, "Screen On", Toast.LENGTH_SHORT).show();
        }else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){
            Toast.makeText(context,"Screen Off",Toast.LENGTH_SHORT).show();
        }
      }
} 

(4)开机启动

public class StartUpReceiver extends BroadcastReceiver {
    public StartUpReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent intent1=new Intent(context,MainActivity.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent1);
    }
}

(5)电池电量改变

private BroadcastReceiver batteryChangedReceiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){
                int level=intent.getIntExtra("level",0);
                int scale=intent.getIntExtra("scale",100);
                textView.setText("当前电量:"+(level*100/scale)+"%");
            }
        }
    };


在AndroidManifest.xml中注册的代码

        <receiver
            android:name=".OutCallReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".StartUpReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter android:priority="999" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
 </receiver>
       <receiver
            android:name=".InCallReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE.STATE" />
            </intent-filter>
        </receiver>

 

需在在Java代码中注册

        //收到屏幕点亮和熄灭的BroadcastReceiver
        IntentFilter filter1=new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter1.addAction(Intent.ACTION_SCREEN_OFF);
        screenOnOffReceiver=new ScreenOnOffReceiver();
        registerReceiver(screenOnOffReceiver,filter1);<pre name="code" class="java">       //收到电池电量改变的BroadcastReceiver
        registerReceiver(batteryChangedReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

需申请的权限

 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.BATTERY_STATS" />
5.动态注册的BroadcastReceiver需要在onDestory()中解除
        unregisterReceiver(shortMessageReceiver);
        unregisterReceiver(screenOnOffReceiver);
        unregisterReceiver(batteryChangedReceiver);
        unregisterReceiver(inCallReceiver);


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值