Android Intent

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值