所学知识之五
更新:HHH   时间:2023-1-7


Activity通过绑定的方式调用Service的方法的步骤:
1、在Service里面创建一个类MyBinder继承Binder
2、在MyBinder这个类里面创建一个方法去调用Service里面的方法。
3、在onBinder这个方法里面,创建一个MyBInder类型的对象,返回回去。

4、在Activity中的ServiceConnection这个接口的onServiceConneted这个方法中得到IBinde对象,
把IBinder对象转换成MyBinder类型的对象。


注意:onServiceConneted能够被执行的条件:service的onBind()方法里面返回一个非空的对象。


四大组件之三:
BroadReceiver广播接收者

创建的要素:
1、继承BroadcastReceiver
2、重写onReceive()
3、清单文件里面注册

接收短信广播

过滤条件:
在清单文件里面:
<intent-filter>
<actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>

权限:
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>

广播接收者:
广播的特性:单向、群发。
场景:1)系统接收某个事件,会群发广播消息
2)应用自己发广播。:sendBroadcast(intent);


代码里面注册广播接收者:
1、MyReceiverreceiver=newMyReceiver();

2、在onstart()方法里面注册:
IntentFilterfilter=newIntentFilter();
filter.addAction("org.yinan");//设置过滤条件
registerReceiver(receiver,filter);//注册广播

3、在onStop()注销广播:
unregisterReceiver(receiver);//参数里面的receiver对象必须跟注册的时候同一对象。


两种注册广播的区别:
相同:项目里面必须要创建BroadcastReceiver。
不同点:1)清单文件里面:设置<intent-filter>标签里面的<action>属性
特性:就算进程不存在的时候,只要广播的过滤条件匹配就会收到广播
2)在代码里面:获取广播接收者对象。然后设置过滤条件。
特性:注册时机比较灵活,我们可以自己控制。

intent意图

显式意图:明确指定类名;意图对象.setClass(xx.this,xxx.class);
隐式意图:没有明确指定类名,指定了过滤条件意图对象.setACtion("xxxxx.xxxx.xxx");

两者之间的区别:
启动目标:显式1个(直接打开)必须在一个应用之内
隐式一个或多个(多个的话就列表打开)跨应用

返回开发技术教程...