广播和自定义广播事件

1,注册自定义的广播事件,这儿的“com.sdingba.bro.aa.bb”为自定义名字,并且registerReceiver注册广播事件

registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

            }
        },new IntentFilter("com.sdingba.bri.aa.bb"));

2。开启广播事件。

            Intent intent = new Intent();
            intent.setAction("com.itheima.mobilesafe.tempstop");
            intent.putExtra("packname", packname);
            sendBroadcast(intent);

自定义锁屏的广播事件,


    private class ScreenOffReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            tempStopProtectPackname = null;
        }
    }
        offreceiver = new ScreenOffReceiver();
        registerReceiver(offreceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));

不能做耗时操作,

1,生命周期只有10s左右】

2,不能耗时

3,荧光棒通过Intent发送给Service,由service完成

4,不能使用子线程

广播的种类:

普通广播::

 Intent iun = new Intent();

    iun.pitExtra("msg","这是一条官博");

    iun.setAction("BC_One");

    snedBroadcast(intent);
calss BC! extnds BroadcastReceiver{

        onReceive(...){

                String s  = intent.getString("msg");

                sout(""+s);

        }

    }


在xml文件中

      <receiver android:name="com.sdingba.xxx.xx">

                <intent-filter android:priority="1000">

                    <action android:name="BC_One">

                </intent-filter>

        </receiver>

手动:

1,创建类

2,——>

IntentFilter intentfilter = new IntentFilter("BC_two");

BC2 bc2 = new BC2();

registerReceiver(bc2,intentfilter);

有序广播:

广播与广播之间传递数据只能在有序广播之间。

发送广播:

Bundle bundle = new Bundle();

bunldle.putString("text","xxxxx");

setResultExtras(bundle);



可以直接:

    setResultExtras(“xxxx”);

然后接受:

String msage = getReaultData(); 



接受广播:

    在onReceive()里面

Bundle bundle = getResultExtras(true);

string aa = bundle.getString("text");

sout(aa);
sendOrderedBroadcast(intent,null);//这是有序广播
//把这个广播终止掉,在有序广播有效果,普通没有
abortBroadcast();

开机启动广播:

public class BootCompleteReceiver extends BroadcastReceiver {

    private SharedPreferences sp;
    private TelephonyManager tm;
    @Override
    public void onReceive(Context context, Intent intent) {

        sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);

        boolean protecting = sp.getBoolean("protecting", false);
        if(protecting){
            //开启防盗保护才执行这个地方
            tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

            // 读取之前保存的SiM信息;
            String saveSim = sp.getString("sim", "")+"afu";

            //读取当前的sim卡信息
            String realSim = tm.getSimSerialNumber();

            //比较是否一样
            if(saveSim.equals(realSim)){
                //sim没有变更,还是同一个哥们
            }else{
                // sim 已经变更 发一个短信给安全号码
                System.out.println("sim 已经变更");
                Toast.makeText(context, "sim 已经变更", 1).show();
                SmsManager.getDefault().sendTextMessage(sp.getString("safenumber", ""), null, "sim changing....", null, null);
            }

        }

    }

}
        <receiver android:name="com.itheima.mobilesafe.receiver.BootCompleteReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    
    短信广播:
public class SMSReceiver extends BroadcastReceiver {




    @Override
    public void onReceive(Context context, Intent intent) {
    }

}
<receiver android:name="com.itheima.mobilesafe.receiver.SMSReceiver" >
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

你可能感兴趣的:(android)