Broadcast广播接收器

来源:互联网 发布:逻辑回归的数据集 编辑:程序博客网 时间:2024/04/27 19:24

定义广播接收器步骤
1、建立自定义类继承BroadcastReceiver实现onReceive方法
2、在清单文件中注册,及相关权限

1、IP拨号器

public class IPCallBroadCast extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // TODO Auto-generated method stub        String ip = context.getSharedPreferences("config", context.MODE_PRIVATE).getString("ip", "");        //获取拨出的电话号码        String data = getResultData();        //设置ip前缀        if(ip==""||ip==null) ip="021";        data = ip + data;        setResultData(data);    }}

在MainActivity中设置ip号码

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View view) {        EditText ip=(EditText) findViewById(R.id.et_ip_number);        String num=ip.getText().toString().trim();        getSharedPreferences("config", MODE_PRIVATE).edit().putString("ip", num).commit();        if(TextUtils.isEmpty(num)){            Toast.makeText(this, "默认设置ip线路021...", 1).show();        }else{            Toast.makeText(this, "设置完毕ip线路"+num+"...", 1).show();        }        finish();    }}

在清单文件中配置

<!-- 注册 -->        <receiver android:name="com.qishui.broadcast.IPCallBroadCast" >            <intent-filter>                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />            </intent-filter>        </receiver>

相关权限

  <!-- 接收电话去向 -->    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

2、截获短信

新建SmsReceivier

public class SmsReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // 拿到短信的信息        // 短信内容封装在intent中        Bundle bundle = intent.getExtras();        // 以pdus为键,取出一个object数组,数组中的每一个元素,都是一条短信        Object[] objects = (Object[]) bundle.get("pdus");        // 拿到广播中的所有短信        for (Object object : objects) {            // 通过pdu来构造短信            SmsMessage sms = SmsMessage.createFromPdu((byte[]) object);            if (sms.getOriginatingAddress().equals("138438")) {                // 阻止其他广播接收者收到这条广播                //abortBroadcast();     SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, "你是个好人", null, null);            }             System.out.println(sms.getMessageBody());}        }}

清单文件中配置

 <!-- sms -->        <receiver android:name="com.qishui.broadcast.SmsReceiver" >            <intent-filter >                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>            </intent-filter>        </receiver>

短信权限

 <!-- 收短信-->    <uses-permission android:name="android.permission.READ_SMS" />    <!-- 发短信 -->    <uses-permission android:name="android.permission.SEND_SMS" />

3、SD卡变化

public class SDReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        //判断收到的到底是什么广播        String action = intent.getAction();        if("android.intent.action.MEDIA_MOUNTED".equals(action)){            Toast.makeText(context, "SD卡可用", 0).show();            System.out.println("SD卡可用");        }        else if("android.intent.action.MEDIA_REMOVED".equals(action)){            Toast.makeText(context, "SD卡拔出", 0).show();            System.out.println("SD卡拔出");        }        else if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){            Toast.makeText(context, "SD卡不可用", 0).show();            System.out.println("SD卡不可用");        }}}
 <!-- Sd -->        <receiver android:name="com.qishui.broadcast.SDReceiver" >            <intent-filter>                <action android:name="android.intent.action.MEDIA_MOUNTED" />                <action android:name="android.intent.action.MEDIA_REMOVED" />                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />                <data android:scheme="file" />            </intent-filter>        </receiver>

4、开机广播

public class BootReceivier extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // TODO Auto-generated method stub        System.out.println("开机了" + getTime());        Toast.makeText(context, "开机了" +getTime(), 1).show();    }    private String getTime() {        long currentTimeMillis = System.currentTimeMillis();        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");        String time = format.format(new Date(currentTimeMillis));        return time;    }}
<receiver android:name="com.example.boast.BootReceivier">            <intent-filter >                <action android:name="android.intent.action.BOOT_COMPLETED"/>            </intent-filter>        </receiver>
 <!-- 开机权限 -->    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>    

5、app应用,安装,更新,卸载

public class AppReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // TODO Auto-generated method stub        String action = intent.getAction();        String data = intent.getDataString();        if ("android.intent.action.PACKAGE_ADDED".equals(action)) {            System.out.println(data + "应用被安装...");            Toast.makeText(context, data + "应用被安装...", 1).show();        } else if ("android.intent.action.PACKAGE_REPLACED".equals(action)) {            System.out.println(data + "应用被更新...");            Toast.makeText(context, data + "应用被更新...", 1).show();        } else if ("android.intent.action.PACKAGE_REMOVED".equals(action)) {            System.out.println("应用被移除...");            Toast.makeText(context, data + "应用被移除...", 1).show();        }    }}
 <receiver android:name="com.qishui.broadcast.AppReceiver">            <intent-filter >                <action android:name="android.intent.action.PACKAGE_ADDED"/>                <action android:name="android.intent.action.PACKAGE_REPLACED"/>                <action android:name="android.intent.action.PACKAGE_REMOVED"/>                <data android:scheme="package"/>            </intent-filter>        </receiver>

6、发送自定义广播和接收自定义广播

在MainActivity中发送自定义广播

public void click2(View view){        Intent intent=new Intent();        intent.setAction("qishui.i.tell.you");        intent.putExtra("name", "qishui");        sendBroadcast(intent);    }

接收自定义广播

public class MyReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // TODO Auto-generated method stub        CharSequence data = intent.getCharSequenceExtra("name");        System.out.println(data + "接收到了广播");        Toast.makeText(context, data + "接收到了广播", 1).show();    }}
 <!-- 接收自定义广播 -->        <receiver android:name="com.qishui.broadcast.MyReceiver" >            <intent-filter>                <action android:name="qishui.i.tell.you" />            </intent-filter>        </receiver>
0 0
原创粉丝点击