android意图和意图监听器技术

版权所有,禁止匿名转载;禁止商业使用。

ntent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递


显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。


隐式意图;不指明调用的名称,根据设置的action,data,category,Android系统会根据这三个特征找到最合适的组件并激活


显示意图;


1,界面意图的创建与启动  (调用系统的打电话的函数   ,str是需要获取的号码)


Intent intent =new Intent();//创建意图对象
    intent.setAction(Intent.ACTION_CALL);//设置系统动作
    intent.setData(Uri.parse("tel:"+str));//设置数据的来源
    startActivity(intent);//启动意图

2,界面之间的数据传递;


//传递数据
//界面之间的跳转信息的传递
Intent intent = new Intent();
//将ip和端口传递到功能界面
intent.putExtra("ips", ips);
  intent.putExtra("ports", ports);
intent.setClass(MainActivity.this, LightUI.class);//将获取到的数据传递到LighUI类中来获取
startActivity(intent);
//获取传递的数据
// 获得intent的iP和ports
    Intent intent = getIntent();//创建获取显示意图的对象
    String ip = intent.getStringExtra("ips"); //获取数据
    String ports = intent.getStringExtra("ports");

3,使用包管理器启动意图


//使用包管理器测试
    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+str));
  //包管理器
    PackageManager pm=this.getPackageManager();
    //判断是否存在
  ComponentName cm=intent.resolveActivity(pm);
  if(cm!=null){
       this.startActivity(intent);
  }else{
      Toast.makeText(this, "请安装应用程序..", Toast.LENGTH_SHORT).show(); 
  }

隐式意图


实现多个数据的返回;


onActivityResult() 方法
//监听器
  public void onchange(View v){
    //带返回值的意图
  Intent intent =new Intent();
  intent.setClass(this, SecondActivity.class);
  //使用带返回值的方法启动意图
  this.startActivityForResult(intent, REQUEST_CODE);
  }
  //接收意图的返回值
  /**requestCode请求码
   * resultCode结果码
   * data获取到的数据
   * 
   */
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==REQUEST_CODE&&resultCode==RESULT_CODE){
      //获取SecondActivity界面传递的值 
      String num=data.getStringExtra("num");
      text.setText(num);
    }
  }

返回数据的activity页面 


//添加按钮的监听器
  public void chan(View v){
    String num="10086";
    // 包装要返回的数据
    Intent intent = new Intent();
    intent.putExtra("num", num);
    this.setResult(MainActivity.RESULT_CODE,intent);
    this.finish();
  }

自定义意图监听器


intent.setAction(Intent.ACTION_CALL);//设置系统动作
intent.setData(Uri.parse(tel:str));    tel:可以拨打电话的原因;

系统在创建意图时,配置了意图监听器;我们自己也可以实现意图监听器 ;例子如下;


意图监听器的配置xml页面;


<activity 
            android:name=".SecondActivity"> 将SecondActivity自定义意图监听器
            <intent-filter>
                <action android:name="com.newer.baihe"/>  action的名字
                
               <category android:name="android.intent.category.DEFAULT" />系统默认的类别,必须要写
          自定义三个类别,可以直接访问其中的一个
               <category android:name="com.baihe.aaa" /> 
               <category android:name="com.baihe.bbb" />
               <category android:name="com.baihe.ccc" />
                  
          
               <data 
                 数据的访问协议
                   android:scheme="baihe"  相当于 tel:
                   android:host="baidu.com"   主机
                   android:path="/index.html" 路径
                   android:mimeType="text/*" 匹配多个
                   />
            </intent-filter>

            </activity>

java代码访问上面自定义的意图监听器


// 带返回值的意图
    Intent intent = new Intent();
    intent.setAction("com.newer.baihe");// 访问自定义的action
    intent.addCategory("com.baihe.aaa");// 访问类别
    intent.setDataAndType(Uri.parse("baihe://baidu.com/index.html"),
        "text/html");// 访问页面
    startActivity(intent);// 启动意图


0 0