告别onActivityResult ,用代理实现获取startActivityForResult结果以及动态权限申请的工具类

写第一篇博文就花了我一个上午的时间又传demo什么七七八八的看来写博文也要一定精力的呢,继续坚持写下去吧!

 

这是第二篇咯,这个工具项目中用处会非常大,以前10几行的代码用这个两三行就可以解决了!

 

次工具类要解决的问题是我们调用  

startActivityForResult(intent,requestCode);

而结果却要在

public void onActivityResult(int requestCode, int resultCode, Intent data) {}

方法里面去哪如果代码多了的话就会显得比较乱,还需要每个调用都要声明个requestCode,如果是权限申请也是非常的麻烦也是比较麻烦,比如调用相册获取图片之前还要申请权限如此就会让代码看起来特别啰嗦。

我目前的解决办法是只要给一个静态风阀传递一个结构体和一个回调就可以解决以上所有问题,让代码调用起来既好看又方便,简单的原理就是用一层fragment去代理这些请求,然后把结果回传给指定的回调对象,我的代码里面每行注释都写的很清楚大家可以细看,次工具我已经应用到我们自己的项目中了,而且完全正常运行,完全不用考虑是在fragment或者是activty里面操作可谓完全结构,可以直接当成一个工具类来使用。

 

具体事例:

单单申请权限的代码

EyRequest.Builder builder = EyRequest.Builder();
                    //检查内存卡读取权限
                    builder.addPermissions(Manifest.permission.READ_EXTERNAL_STORAGE);
                    builder.addPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE);
                    ActivityResult.create(mActivity).startPermissions(builder.build(), new ActivityResult.PermissionsBack() {
                        @Override
                        public void PermissionsResult() {
                            //权限申请成功会执行里面的内容
                        }
                    });

调用activity并处理回调比如拍照

EyRequest.Builder builder = EyRequest.Builder();
            builder.setIntent(intent);  //intent为拍照的intent
            builder.addPermissions(Manifest.permission.READ_EXTERNAL_STORAGE);//检查内存卡读取权限
            ActivityResult.create(context).startActivityWithResult(builder.build(), new ActivityResult.OnActivityBack() {
                @Override
                public void OnActivityResult(Intent intent) {
                    //此处的内容就是权限都通过后回传的intent
                }
            });

最后DEMO 已经上传如果你要使用的话只要引用我的库就行了。。

话说那些什么组件开发是不是就是把自己的功能打成一个module就是组件化了?????

DEMO下载地址

https://download.csdn.net/download/lizefeng19/10772808   

 

 

 

 

看是不是比我们之前写的代码简单多了,同时申请权限和拍照我们只要调用一个方法就可以搞定,再也不用命名那么多的requestCode代码是相当简洁,这部分的代码还比较多我还知道怎么上传,等研究研究看能不能打包成一个第三方库直接用吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android的新版本中,推荐使用registerForActivityResult方法代替旧的startActivityForResult方法。 示例: 在Activity中: ``` // 定义一个ActivityResultLauncher ActivityResultLauncher<Intent> launcher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { // 处理返回结果 if (result.getResultCode() == RESULT_OK) { Intent data = result.getData(); // 处理返回的数据 } }); } // 启动Activity public void startOtherActivity() { Intent intent = new Intent(this, OtherActivity.class); // 启动Activity launcher.launch(intent); } ``` 在Fragment中: ``` // 定义一个ActivityResultLauncher ActivityResultLauncher<Intent> launcher; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { // 处理返回结果 if (result.getResultCode() == RESULT_OK) { Intent data = result.getData(); // 处理返回的数据 } }); } // 启动Activity public void startOtherActivity() { Intent intent = new Intent(getActivity(), OtherActivity.class); // 启动Activity launcher.launch(intent); } ``` 在上述示例中,我们使用registerForActivityResult方法创建了一个ActivityResultLauncher,然后调用launcher.launch(intent)启动Activity,并在回调方法中处理返回的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值