天天看点

Broadcast广播接收器

定义广播接收器步骤

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...", ).show();

        }else{
            Toast.makeText(this, "设置完毕ip线路"+num+"...", ).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卡可用", ).show();
            System.out.println("SD卡可用");
        }
        else if("android.intent.action.MEDIA_REMOVED".equals(action)){
            Toast.makeText(context, "SD卡拔出", ).show();
            System.out.println("SD卡拔出");
        }
        else if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){
            Toast.makeText(context, "SD卡不可用", ).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(), ).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 + "应用被安装...", ).show();

        } else if ("android.intent.action.PACKAGE_REPLACED".equals(action)) {
            System.out.println(data + "应用被更新...");
            Toast.makeText(context, data + "应用被更新...", ).show();

        } else if ("android.intent.action.PACKAGE_REMOVED".equals(action)) {
            System.out.println("应用被移除...");
            Toast.makeText(context, data + "应用被移除...", ).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 + "接收到了广播", ).show();
    }

}
           
<!-- 接收自定义广播 -->
        <receiver android:name="com.qishui.broadcast.MyReceiver" >
            <intent-filter>
                <action android:name="qishui.i.tell.you" />
            </intent-filter>
        </receiver>