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();

比其优先级低的接收端将接受不到广播

 

posted @ 2016-07-17 19:37  YBOLi  阅读(423)  评论(0编辑  收藏  举报