您的位置:首页 > 移动开发 > Android开发

Android Intent

2016-06-02 18:28 531 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android