安卓广播

来源:互联网 发布:九阴真经买淘宝礼包 编辑:程序博客网 时间:2024/05/17 02:50

广播就这几个步骤

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——可点击,可触摸,可显示在状态栏上,但是影响其他应用的亮度调节

 

 

接口回调

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

0 0
原创粉丝点击