Intent用法

来源:互联网 发布:淘宝手机都假的吗 编辑:程序博客网 时间:2024/05/17 07:16

显式启动
Intent构造器
(指明启动的组件);
隐式启动
(不会指明启动的组件)
显式启动的几种方式
1查看Intent构造
安卓推荐的构造方式
 public Intent(
 Context packageContext,--上下文对象
  Class<?> cls--目标组件.class
  ) {
  mComponent =
  new ComponentName(packageContext, cls);
    }
其他类别创建显式意图的方式

    public Intent setComponent(
    ComponentName component) {
        mComponent = component;
        return this;
    }
 
   public Intent setClassName(
   Context packageContext,上下文对象
    String className:目标组件完整路径名
    ) {
        mComponent = new ComponentName(packageContext, className);
        return this;
    }  
    
   public Intent setClassName(
   String packageName,起始组件包名
    String className->目标组件完整路径名
    ) {
        mComponent = new ComponentName(packageName, className);
        return this;
 public Intent setClass
 (Context packageContext,上下文对象
  Class<?> cls目标组件.class
  ) {
        mComponent = new ComponentName(packageContext, cls);
        return this;
    }
    }   
 ----
 测试显示的启动
 1创建目标界面(activity)
 绑定一个布局
 注意activity要主配置文件进行注册
 2当前界面添加按钮-->初始化设置监听器
  android:onClick="按钮点击事件的名称"
  要求acitivity添加对应事件
  对单击事件做出处理
  activity层必须添加方法
  语法
  public void 方法名(View v){
      处理单击事件
  }

 3按钮单击事件进行测试
 
----------显式测试内容
1intent(上下文对象,目标组件.class);-->安卓推荐
2setClass方式-->安卓不推荐
intent.setClass(上下文对象, 目标组件.class)
测试步骤
1>创建一个无参的intent对象
2>用setClass()方法来显示跳转目标
startByClass()-->测试
3setClassName 方式-->不推荐
测试步骤

1>创建一个无参构造
2>调用setClassName 进行目标组件的绑定
startByClassName1()
setClassName(
packageContext,-->上下文对象
 className-->目标组件完整路径名(参照主配置文件)
 <activity name="这里就是">
 )
intent.setClassName(
packageName,当前界面所在包名
 className,目标组件完整路径名
 )
4通过setConpent()来指定目标--->推荐
测试步骤
1>创建无参intent
2>创建compentName 对象
3>将compentName对象绑定给intent
--------------------------------------
隐式启动(组件名或者指向不可见);

1隐式启动安卓系统内置组件


1>调用系统组件进行电话呼出
测试步骤
打电话的权限

android.permission.CALL_PHONE
创建一个intent(action)Intent.ACTION_CALL
给intent绑定data(Uri)    
Uri data = Uri.parse("tel://10086")

startactivity(intent)

                Intent intent = new Intent(Intent.ACTION_CALL);Uri data = Uri.parse("tel://10086");intent.setData(data);startActivity(intent);



2>调用系统拨号界面

步骤
创建intent(action)
Intent.ACTION_DIAL
绑定data(Uri)

data = Uri.parse("tel:10086");

                       <span style="font-size:18px;">        intent = new Intent(Intent.ACTION_DIAL);Uri data = Uri.parse("tel:10086");intent.setData(data);startActivity(intent);</span>


3>上网
创建intent(action)
Intent.ACTION_VIEW
绑定data(Uri)

data = Uri.parse("http://网址");

                      <span style="font-size:18px;">          intent = new Intent(Intent.ACTION_VIEW);data = Uri.parse("http://www.baidu.com");intent.setData(data);startActivity(intent</span>);



4>播放媒体文件
创建intent(action)
Intent.ACTION_VIEW
绑定data(Uri)
data = Uri.parse("file://文件的路径");

MP3播放

                        intent = new Intent(Intent.ACTION_VIEW);data = Uri.parse("file://mnt/sdcard/Music/CityHunter-Nina.mp3");intent.setDataAndType(data, "audio/mp3");startActivity(intent);


5>发送短信
(API等级高于或等于19)
1SmsManager 需要使用权限
android.permission.SEND_SMS
2创建SmsManager对象
SmsManager.getDefault();

3发送短信



sendTextMessage:可用于发送短信
    public void sendTextMessage(
            String destinationAddress,:电话
             String scAddress,:短信中心号码null
              String text,发送的内容
            PendingIntent sentIntent:,发送短信成功后后续操作null
             PendingIntent deliveryIntent:发送短信失败作操作null
             ) {
        }
 public ArrayList<String>
  divideMessage(String text) {
      将短信息进行拆分(拆分标准 中文70英文140)
    }
不受api等级限制发送

直接调用系统的发送短信工具

<span style="font-size:18px;">                        // 发送短信要求API大于等于19// 创建短信管理者SmsManager manager = SmsManager.getDefault();String destinationAddress = "10086";// 要发送的号码String scAddress = null;// 短信中心号码,可用为nullString text = "你好啊";// 发送内容PendingIntent sentIntent = null;// 发送成功后的后续操作PendingIntent deliveryIntent = null;// 发送失败后的后续操作manager.sendTextMessage(destinationAddress, scAddress, text,sentIntent, deliveryIntent);// 要添加权限</span>




4 新建任务栈让acitivity 执行出栈的操作
步骤
intent(action);
setflag(标记)
addcategory(额外信息);

启动--activity结束


                //返回Home页面,全部Activity都弹出栈Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);



2自定义隐式启动
步骤
1>当前页
//创建的intent包含过滤器里的条件
条件为多个的则需要每个条件都要和目标组件对应

2>目标页
在acitivity标签创建<Intent-filter>
  在标签内部添加对应的匹配条件
  <activon android:name="....">
  <category  >
  必备标签
 <category android:name="android.intent.category.DEFAULT"/>
</Intent-filter>

3>书写过滤器
一个过滤器可以有多个action
一个activity可以有多个
intent-filter()也要保证每个过滤器里都有
<category android:name=
"android.intent.category.DEFAULT"/>
安卓系统匹配的时候只要和其中一条action匹配上就可以跳转

------------------------------------
intent 数据传递
1激活组件
2数据的传递
Extra
存数据 put...();
步骤
创建intent
调用intent
对应putExtra(key,value);--名值对做数据封装

取数据 get..();
目标界面
步骤
获取前一个界面传递过来的intent
Intent intent=getIntent();
返回谁把我这个界面启动了(intent)
掉用intent.get..Extra(key) 来取得数值

 

0 0