1.简介
不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。(activity, service, broadcasts)
2.属性
动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性
1)action
EXTRA_INITIAL_INTENTS//附加选择器
ACTION_CHOOSER//文件选择器
ACTION_GET_CONTENT//内容选择列表
MediaStore.ACTION_IMAGE_CAPTURE//打开一组相机的列表引用
2)data
Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。比如:ACTION_EDIT Action应该和要编辑的文档URI Data匹配,ACTION_VIEW应用应该和要显示的URI匹配。
3)Category
CATEGORY_BROWSABLE
CATEGORY_GADGET
CATEGORY_HOME
CATEGORY_LAUNCHER
CATEGORY_PREFERENCE
4)Type
ntent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
5)Compent
Intent的Compent属性指定Intent的的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。
6)Extra
Intent的Extra属性是添加一些组件的附加信息。
putExtra()/getStringExtra()
3.使用经验
1)上传图片,文件选择/拍照
public Intent getUploadIntent() {//总选择器
Intent selectIntent = getSelectIntent();
Intent captureIntent = getCaptureIntent();
Intent chooser = getChooserIntent(selectIntent);
if (captureIntent != null) {
chooser.putExtra(Intent.EXTRA_INTENT, captureIntent);
}
return chooser;
}
private Intent getSelectIntent() {//图片选择
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
return intent;
}
private Intent getCaptureIntent() {//照片选择
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(WebViewActivity.this.getPackageManager()) != null) {
try {
picFile = createImageFile();
} catch (Exception e) {
ToastUtil.showShort(MyActivity.this, "no permission");
e.printStackTrace();
}
if (picFile != null) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(picFile));
} else {
return null;
}
} else {
return null;
}
return intent;
}
private File createImageFile() throws Exception {//获得照片文件
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
if (!storageDir.exists()) {
storageDir.mkdirs();
}
captureFile = File.createTempFile("tamp", ".png", storageDir);
return captureFile;
}
private Intent getChooserIntent(Intent... intents) {//文件选择器
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CHOOSER);
intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents);
return intent;
}