android意图和意图监听器技术

Intent是在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);// 启动意图

 

 

 

 

   

 

 

你可能感兴趣的:(android,显示意图,隐式意图,意图监听器)