zoukankan      html  css  js  c++  java
  • 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();

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

  • 相关阅读:
    禁用aspx页面的客户端缓存
    水晶报表的自动换行(转)
    ORACLE锁的管理
    同时使用有线和无线
    Oracle系统表的查询
    Oracle中临时表的深入研究
    我的My Life Rate
    [学习笔记]c#Primer中文版命名空间
    出差兰州·火车上
    [学习笔记]c#Primer中文版类设计、static成员、const和readonly数据成员
  • 原文地址:https://www.cnblogs.com/yboli/p/5678025.html
Copyright © 2011-2022 走看看