安卓广播

    xiaoxiao2024-11-20  9

    广播就这几个步骤

    1.写一个类继承BroadcastReceiver

    2.配置<receiver android:name="com.itheima.sdstatus.SDCardStatusReceiver" >

    <intent-filter>

                    <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>动作,可以多个动作

                    <data android:scheme="file"></data>数据类型

    <category android:name="android.intent.category.APP_GALLERY"/>

              </intent-filter>

    </receiver>

    3.onreceiver写逻辑,intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

    添加开机广播的权限android.permission.RECEIVE_BOOT_COMPLETED;

    短信拦截   Object[] objs = (Object[]) intent.getExtras().get("pdus");

    for(Object obj:objs){

    SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);

    String body = smsMessage.getMessageBody();

    String sender = smsMessage.getOriginatingAddress();

    System.out.println("body:"+body);

    System.out.println("sender:"+sender);

    abortBroadcast();

    }

     

     

    自定义广播

    //发送自定义的广播.

    Intent intent = new Intent();

    intent.setAction("com.itheima.ccav.XWLB");

    intent.putExtra("key", "dfafadfa");

    sendBroadcast(intent);//无序广播.

     

    自定义广播(有序)

    Intent intent = new Intent();

    intent.setAction("com.itheima.gov.SENDMASHROOM");

    //设置优先级 priority

    //setResultData//修改数据

    //发送有序广播

    //intent 意图

    //receiverPermission 权限 默认null

    //resultReceiver 结果接受者 null

    //消息处理器 null 默认

    // Bundle  null额外的数据

    //最终接受者new MyReceiver()

      //sendOrderedBroadcast(intent, null, new MyReceiver(), null, 1, "你好大啊", null);

    //abortBroadcast();拦截广播

     

     

    代码注册广播还有个本地广播(----------)

    另外写个广播事件

    SCREEN_ONSCEEN_OFF

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    //注册广播接受者

    receiver = new ScreenStatusReceiver();

    IntentFilter filter = new IntentFilter();

    filter.addAction("android.intent.action.SCREEN_OFF");

    filter.addAction("android.intent.action.SCREEN_ON");

    registerReceiver(receiver, filter);

    }

     

    @Override

    protected void onDestroy() {

    // 取消注册广播接受者

    unregisterReceiver(receiver);

    receiver = null;

    super.onDestroy();

    }

     

     

     

    观察数据库变化

    数据库操作优化

    >数据库数据保存到内存中,通过内容观察者更新内存数据。

     

    DAO通知观察者数据库变化:

    context.getContentResolver().notifyChange(Uri.parse("content://com.itheima.mobilesafe.applockdb"), null);   //null 代表通知所有

     

    内容观察者监听数据库变化:

    注册:

    getContentResolver().registerContentObserver(Uri.parse("content://com.itheima.mobilesafe.applockdb"), true,observer);   //true 代表子路径也监听

     

    反注册:

    getContentResolver().unregisterContentObserver(observer);

     

    private class MyObserver extends ContentObserver {

     

    public MyObserver(Handler handler) {

    super(handler);

    }

     

    // 内容观察者观察到数据变化调用的方法

    @Override

    public void onChange(boolean selfChange) {

    Log.i(TAG, "看门狗里面的内容观察者观察到了数据库变化。。。。");

    lockedPacknames = dao.findAll();

    super.onChange(selfChange);

    }

    }

     

     

     

     

    >standard:默认标准模式。打开一个Activity就创建一个Activity

    >singleTop:不允许相同Activity叠加。假如栈顶已经有了,就复用,没有才创建。触发onNewIntent()方法。

    >singleTask:保证任务栈里Activity的实例只有一个。如果没有就创建,如果有,就把它上面的Activity清空。 触发onNewIntent()方法。

    >singleInstance:单独存在独立的任务栈。单例。触发onNewIntent()方法

     

     

     

     

    自定义Toast

    通过WindowManager添加自定义View到窗体

     

    WindowManager mWM = (WindowManager) getSystemService(WINDOW_SERVICE);

    //自定义View

    View mView;

    //设置参数

    final WindowManager.LayoutParams params = mParams;

    params.height = WindowManager.LayoutParams.WRAP_CONTENT;

    params.width = WindowManager.LayoutParams.WRAP_CONTENT;

    params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE

    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE

    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

    params.format = PixelFormat.TRANSLUCENT;

    params.type = WindowManager.LayoutParams.TYPE_TOAST;

    //添加到窗体。

    mWM.addView(view, mParams)

    //移除View,注意状态,删除失败报异常

    mWM..removeView(view)

     

     

    补充:

    params.flags

     

    > * FLAG_LAYOUT_NO_LIMITS——没有边界限制(可移动到屏幕外)

    > * FLAG_NOT_FOCUSABLE——不可获取焦点

    > * FLAG_NOT_TOUCHABLE——不可触摸

    > * FLAG_KEEP_SCREEN_ON——保持屏幕常亮

     

    params.type

    > * TYPE_TOAST——不可点击,不可触摸

    > * TYPE_PRIORITY_PHONE——可点击可触摸,不可以显示在状态栏上

    > * TYPE_SYSTEM_ERROR——可点击,可触摸,可显示在状态栏上,但是影响其他应用的亮度调节

     

     

    接口回调

    内部定义一个接口,有抽象方法,把这个接口当做参数,调用该方法时,要重写抽象方法,把逻辑加进去.降低了耦合性

    转载请注明原文地址: https://ju.6miu.com/read-1293839.html
    最新回复(0)