Android基础知识——组件Intent

组件Intent是一个用于指定目标组件的类(可以实现两个组件之间的通信),结合前面所学以及今天所学,大概有以下几种指定的方式

1、指定当前组件对象以及目标组件的class

Intent i = new Intent(currentComponent.this,aimComponent.class);

2、通过指定目标组件包名以及类名进行指定,例如我要指定位于包com.xiaotong.myapp中的Aty1

<pre name="code" class="java">Intent i = new Intent();
i.setComponent(new ComponentName("com.xiaotong.myapp", "com.xiaotong.myapp.Aty1"));

 


3、通过指定组件action进行指定

首先需要在AndroidManifest.xml的application节点中创建相关组件配置节点,然后在配置节点中添加<Intent filter></Intent filter>

标签,再此标签中指定指定该组件的action、category、data标签

<activity 
       android:name="com.xiaotong.myapp.ImageViewer"
       android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
       <intent-filter >
             <action android:name="android.intent.action.VIEW"/>
             <category android:name="android.intent.category.DEFAULT"/>
             <data android:mimeType="image/*" android:scheme="file"/>
        </intent-filter>
 </activity>
注意:category不可缺失,否则将打不开该组件,一般使用
android.intent.category.DEFAULT

然后就进行指定了,这里以打开一个图片为例(打开各类文件用此方法)

File f=new File("mnt/sdcard/1.jpg");
Intent i = new Intent(Intent.ACTION_VIEW);
<span style="font-family: Arial, Helvetica, sans-serif;">i.setDataAndType(Uri.fromFile(f),"image/*");</span>
startActivity(i);

如果是调用其他的app(不需要说明type),这里以给10086打电话以及打开百度网页为例
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("tel:10086"));
<pre name="code" class="java">Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://baidu.com"));

 

关于Intent Filter,一个过滤器,系统在发送某个Intent时,会扫描组件<Intent Filter />标签,如果符合相关条件便会让用户选择打开方式:



跟多内容可以参考

IntentFilter

这里有一个创建的图片查看器

package com.xiaotong.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class ImageViewer extends Activity {

	private ImageView iv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		iv = new ImageView(this);
		setContentView(iv);
		
		iv.setImageURI(getIntent().getData());
		
	}
}


MainActivity.class:
package com.xiaotong.myapp;



import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;
import android.os.Bundle;

import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity{

	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.btnAty1).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
//				Intent i = new Intent();
//				i.setComponent(new ComponentName("com.xiaotong.myapp", "com.xiaotong.myapp.Aty1"));
				Intent i = new Intent("com.xiaotong.myapp.intent.action.Aty1");
				startActivity(i);
				
			}
		});
		findViewById(R.id.btnOpenImage).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				File f=new File("mnt/sdcard/1.jpg");
				Intent i = new Intent(Intent.ACTION_VIEW);
				i.setDataAndType(Uri.fromFile(f),"image/*");
				startActivity(i);
				
			}
			
		});
		findViewById(R.id.btntel10086).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent i = new Intent(Intent.ACTION_VIEW);
				i.setData(Uri.parse("tel:10086"));
				startActivity(i);
			}
		});
		findViewById(R.id.btnCBD).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://baidu.com"));
				startActivity(i);
			}
		});
		
		
	}	
}

Aty1.class:
package com.xiaotong.myapp;

import android.app.Activity;
import android.os.Bundle;

public class Aty1 extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.aty1);
		findViewById(R.id.aty1);
	}
}
ImageViewer.class:

package com.xiaotong.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class ImageViewer extends Activity {

	private ImageView iv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		iv = new ImageView(this);
		setContentView(iv);
		
		iv.setImageURI(getIntent().getData());
		
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值