Intent和广播
一、Intent (意图)
Intent 分为两种,一种是显示意图,另一种是隐式意图。
1.显示意图
Intent intent =new Intent(this,***.class); startActivity(intent); --------开启Activity
通过Intent的构造方法创建Intent对象,它有两个参数,第一个是上下文环境,第二个是要打开的组件名称。
还有另外的一种方式
Intent intent =new Intent(); intent.setClassName("***.***.***","***.***.***"); startActivity(intent);
setClassName的第一个参数是指定组件所在的包名,第二个组件是全路径名。
2.隐式意图
利用隐式意图打开Activity的方法
Intent intent =new Intent(); intent.setAction("要打开的动作"); intent.setCategory("类型"); startActivity(intent);
intent会根据你想要跳转到Activity的动作,类型,数据类型在整个项目中寻找与之相匹配的Activity
如果想要被隐式意图打开,那就需要修改添加清单文件里面的设置
<activity android:name="cn.itcast.opencamera.Activity02" > ----- Activity的全路径 <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> -----动作 (第一层筛选,与上一个Activity要打开的动作匹配)
<category android:name="android.intent.category.DEFAULT" /> -----类别 (第二层筛选,也需匹配)
<data android:name="格式:******"> -----数据格式 (第三层筛选,格式匹配,接收数据) </intent-filter>
</activity>
3.数据传递
String str="string";
intent.putExtra("STR",str); ---键值对
在下一个Activity中就可以直接获取数据了
intent.getExtra("STR");
二、广播
创建一个类extends(继承)BroadcastReceiver
其中有一个getResultData()方法,他可以监听广播,如果监听到广播它会执行这个方法
除此之外还需注册广播类型
广播又分为静态广播和动态广播
1.静态广播
只需在清单文件中配置即可
<receiver android:name="com.example.hanshu.broadcastreceiver.Broadcast"> <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> ----广播类型 </intent-filter> </receiver>
2.动态广播
MyBroadCastReceiver receiver=new MyBroadCastReceiver(); String action="android.intent.action.NEW_OUTGOING_CALL"; ----广播类型
IntentFilter intentFilter=new IntentFilter(action);
registerRexeiver(receiver,intentFilter);
3.自定义广播
Intent intent=new Intent(); intent.setAction("android.intent.action.NEW_OUTGOING_CALL"); ---和隐式意图有些像,只是开启方式不同
sendBroadcast(intent);
4.有序广播和无需广播
在广播发送端没有区别,主要和接受端注册时的配置有关
android:prioriey="(-1000----1000)"
数值越大,优先级越高
5.有序广播的拦截
在onReceive()中添加abortBroadcast();
比其优先级低的接收端将接受不到广播