andriod广播接收者

一.静态注册广播接受者

基本步骤

1.新建广播接收者类继承于BroadcastReceiver并实现方法onReceive

public class SmsBroadReceiver extends BroadcastReceiver
{
	@Override
    public void onReceive(Context context, Intent intent)
    {
    	
    }
}

2.在Manifest中注册接收者

<receiver android:name=".SmsBroadReceiver">
     <intent-filter>
          <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
      </intent-filter>
</receiver>

3.如果此接收者须要权限,须要再Manifest中开启相关权限

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

4.在第一步定义的类中实现拦截逻辑

电话拦截器

1.定义类并实现相关方法及逻辑

public class MyBroadReceive extends BroadcastReceiver
{

    private static final String TAG = "MyBroadReceive";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        log("进入拦截器");
        String action = intent.getAction();
        switch (action)
        {
            case "android.intent.action.NEW_OUTGOING_CALL":
                Log.d(TAG, "正在拨打电话,号码:" + getResultData());
                break;
        }

    }
}

2.Manifest中注册接收者

 <receiver android:name=".MyBroadReceive">
     <intent-filter>
         <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
     </intent-filter>
 </receiver>

3.开启权限

 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

短信接收者

1.定义类并实习方法

public class SmsBroadReceiver extends BroadcastReceiver
{
    private static final String TAG = "SmsBroadReceiver";
    @Override
    public void onReceive(Context context, Intent intent)
    {
        //获取格式化规则
        String format = intent.getStringExtra("format");
        //pdus是一个object类型的数组,每一个object都是一个byte[]字节数组,每一项为一条短信。
        Object[] pdus = (Object[]) intent.getExtras().get("pdus");
        for (Object pdu : pdus)
        {
            SmsMessage message;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
            {
                message = SmsMessage.createFromPdu((byte[])pdu,format);
            }
            else
            {
                message = SmsMessage.createFromPdu((byte[])pdu);
            }
            String number = message.getOriginatingAddress();
            String sms = message.getMessageBody();

            Log.d(TAG,number+":"+sms);
        }
    }
}

2.在Manifest中注册接收者

 <receiver android:name=".SmsBroadReceiver">
     <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
     </intent-filter>
 </receiver>

3.开启权限

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

细节

有两个广播接收者需要配置data标签

1.挂在sd卡跟卸载sd卡

<receiver android:name=".MediaBroadReceive">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_MOUNTED"/>
        <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
        <data android:scheme="file"/>
    </intent-filter>
</receiver>

2.卸载跟安装软件

<receiver android:name=".r">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_INSTALL"/>
        <action android:name="android.intent.action.PACKAGE_ADDED"/>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
        <data android:scheme="package"/>
    </intent-filter>
</receiver>

二.动态注册广播接收者

1.新建java类,继承broadcastreceiver,并完善相关逻辑

public class MyBroadcastReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();
        if(action.equals(Intent.ACTION_SCREEN_OFF))
        {
            System.out.println("屏幕关闭了");
        }
        if(action.equals(Intent.ACTION_SCREEN_ON))
        {
            System.out.println("屏幕打开了");
        }
    }
}

2.在onCreate方法中动态注册广播接受者

    private MyBroadcastReceiver receiver;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        receiver = new MyBroadcastReceiver();

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);

        registerReceiver(receiver,filter);
    }

3.重写destroy方法,在意图关闭的时候取消注册广播接受者

    @Override
    protected void onDestroy()
    {
        unregisterReceiver(receiver);
        super.onDestroy();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值