ActivityResultContracts优雅封装,打开文件管理器

XResultLauncher

open class XResultLauncher<I, O>(caller: ActivityResultCaller, contract: ActivityResultContract<I, O>) {

    private var launcher: ActivityResultLauncher<I>? = null
    private var callback: ActivityResultCallback<O>? = null

    init {
        launcher = caller.registerForActivityResult(contract, ActivityResultCallback { result: O ->
            if (callback != null) {
                callback!!.onActivityResult(result)
                callback = null
            }
        })
    }
    fun launch(@SuppressLint("UnknownNullness") input: I, callback: ActivityResultCallback<O>) {
        this.callback = callback
        launcher!!.launch(input)
    }
}

XActivityLauncher

open class XActivityLauncher(caller: ActivityResultCaller) :
        XResultLauncher<String, Uri?>(caller,ActivityResultContracts.GetContent())

使用方法

 private XActivityLauncher getContentLauncher = new XActivityLauncher(this);
 
getContentLauncher.launch("txt/*", new ActivityResultCallback<Uri>() {
                @RequiresApi(api = Build.VERSION_CODES.Q)
                @Override
                public void onActivityResult(Uri result) {
                  //回调的逻辑
                }
            });

没封装前

    ActivityResultLauncher launcher = registerForActivityResult(new ResultContract("txt/*"), new ActivityResultCallback<Intent>() {
        @RequiresApi(api = Build.VERSION_CODES.Q)
        @Override
        public void onActivityResult(Intent result) {
            if (result == null) {
                return;
            }
            Uri uri = result.getData();
            readFromXML(PickUtils.getFileApiQ(uri,getContext()), new CommonCallback<String>() {
                @Override
                public void Callback(String bean) {
                    Log.d("DashboardFragment", bean);
                }
            });
        }
    });

ResultContract

public class ResultContract extends ActivityResultContract<Boolean, Intent> {

    private String fileType;
    public ResultContract(String type){
        this.fileType = type;
    }
    @NonNull
    @Override
    public Intent createIntent(@NonNull Context context, Boolean input) {
        Intent intent = new Intent();
        intent.setType(fileType);//同时选择视频和图片
        intent.setAction(Intent.ACTION_GET_CONTENT);
        //  Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        return intent;
    }
    @Override
    public Intent parseResult(int resultCode, @Nullable Intent intent) {
        return intent;
    }
}

调用

launcher.launch(true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九狼JIULANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值