image.png onActivityResult 在一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面 这种带数据的意图跳转需要使用activity的onActivityResult()方法。 第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。 onActivityResult(int requestCode, int resultCode, Inten data) onActivityResult中 第一个参数:这个整数requestCode resultCode, Intent data) 在意图跳转的目的地界面调用这个方法把Activity想要返回的数据返回到主Activity, 第一个参数:当Activity结束时resultCode将归还在onActivityResult
一、思考 当Activity A启动一个Activity B后,B finish,我们可能需要处理B返回的值,此时,我们可能就需要用到了onActivityResult,需要在Activity A中重写实现 所以我产生以下思路:通过给当前的Activity添加一个空壳的Fragment,往空壳的Fragment中传入Listener,然后由该Fragment去启动新的Activity,最终在这个空壳的Fragment的onActivityResult requestCode, OnActivityResultCallBack callBack); interface OnActivityResultCallBack { void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode = null) { callBack.onActivityResult(resultCode, data); } } 这里使用一个字典SparseArray
为什么要丢掉 onActivityResult ? 如何启动一个新的 Activity,并获取返回值? 你的答案肯定是 startActivityForResult 和 onActivityResult 。 没错,一直以来,在某些场景下,例如启动系统相机拍照,返回当前页面后获取照片数据,我们并没有其他选择,只能在 onActivityResult 中进行处理。 在介绍新 API 之前,我们不妨思考一下,为什么 Google 要丢掉 onActivityResult ? 减少样板代码,解耦 ,更易测试 。 可能一直以来我们也只有这一个选择,所以也很少看到有人抱怨 onActivityResult。精益求精的 Google 工程师为我们改进了这一问题。
根据错误信息的提示,增加FLAG_ACTIVITY_NEW_TASK flag,即可解决问题。 解决方法:
背景 在项目开发中,发现startActivityForResult和onActivityResult方法已经被废弃了,这是为什么呢?有代码强迫症的我开始了研究。 (Object) callback}. */ @CallSuper @Override @Deprecated protected void onActivityResult mActivityResultRegistry.dispatchResult(requestCode, resultCode, data)) { super.onActivityResult 但随之产生了许多问题,随着应用功能不断添加迭代,onActivityResult方法会存在各种处理数据的回调,嵌套严重,难以维护,并且还得定义一堆额外的常量REQUEST_CODE,用于判断是哪个请求的回调结果 :1.3.0-alpha02 中,已经废弃了startActivityForResult和onActivityResult方法。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 随着应用的扩展,onActivityResult回调方法各种嵌套、耦合严重、难以维护。 最常见的场景就是调用系统相机相册获取照片了。 onActivityResult 现状? :1.3.0-alpha02 中,已经废弃了startActivityForResult和onActivityResult方法。 相比onActivityResult有哪些优势?接下来,将一一为你解答。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 随着应用的扩展,onActivityResult回调方法各种嵌套、耦合严重、难以维护。 最常见的场景就是调用系统相机相册获取照片了。 onActivityResult 现状? :1.3.0-alpha02 中,已经废弃了startActivityForResult和onActivityResult方法。 相比onActivityResult有哪些优势?接下来,将一一为你解答。
现有 MainActivity,当它进入到 SecondActivity 后,在 SecondActivity 中进行了某些操作然后需要将值返回给 MainActivity 时,就需要用到 onActivityResult (2)onActivityResult()方法中的第二个参数就是SecondActivity传回来的键,第三个参数就是SecondActivity传回来的键对应的值。 (int requestCode, int resultCode, Intent data) { Log.i(TAG, "onActivityResult"+"requestCode"+requestCode (requestCode, resultCode, data); } SecondActivity 类中的代码: 这个里面的 RESULT_CODE、intent 分别跟上段代码中 onActivityResult ; setResult(RESULT_CODE, intent); finish(); } 补充说明 onActivityResult() 方法中的第二个参数 resultCode
问题回顾: 在Android8.0手机上不能直接安装Apk,需要权限申请,回调后执行onActivityResult()方法,并弹出对应的dialog,这时需要判断当前Activity是否处于resume 问题本质 Activity跳转到系统应用后回调onActivityResult() 先执行还是onResume()先执行? (int requestCode, int resultCode, Intent data) { } onActivityResult()注释中有这么一句话: You will receive this (意思是说当你的Activity重新启动时 onActivityResult() 会在onResume()之前执行) 很显然,如果你的Activity 调用了 startActivityForResult () 方法启动,回调之后会先执行 onActivityResult() ,然后执行onResume() 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139798.
System.out.println(e); } catch (NullPointerException e) { System.out.println(e); } } } 用户成功登录后: protected void onActivityResult ,Toast.LENGTH_SHORT).show(); } } 问题是,onResume()在onActivityResult()之前被调用,所以当用户成功登录时,我的主活动不会得到通知,因为首先调用
使用 Fragment 封装权限申请 使用 Fragment 优雅处理 onActivityResult Activity reCreate 的时候用来存储数据 这篇文章主要讲解以下内容 使用 Fragment 封装权限申请 使用 Fragment 优雅处理 onActivityResult 当然,这些封装,网上都有相应的开源库了, RxPermission, EasyPermision, RxActivityReslut ---- 使用 Fragment 优雅处理 onActivityResult 我们先来看一下没封装之前 onActivityresult 的处理方式 我们先来看下正常情况下启动 Activity 和接收回调信息的方式 onActivityResult 都在同一个 activity 处理,如果这种方式特别多的话,我们要写一大堆的 if else,代码可读性大大较低,也不是很优雅。 在 onActivityresult 里面根据 requestCode 找到相应的 callback,并进行相应的回调。
startActivityForResult(intent, REQUEST_CODE_CAMERA); } 相机拍摄后的回调如下: @Override public void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode
调用,当前的Fragment的onActivityResult,和父Activity的onActivityResult都会调用 用getParentFragment发起调用,则只有父Activity和父 Fragment的onActivityResult会被调用,当前的Fragment的onActivityResult不会被调用。 这里2和3的前提是如果父activity中重写了onActivityResult,父Activity的onActivityResult中必须添加super.onActivityResult() 总结起来就是 这里就有一个问题需要注意了,我们一般都会覆写父Activity中的onActivityResult方法,这个时候我们必须在onActivityResult方法加上super.onActivityResult 方法没有调用super.onActivityResult()方法而导致Fragment中死活接收不到onActivityResult的回调。
MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, CAMERA); 回调 @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, { super.onActivityResult(requestCode, resultCode, data) if (requestCode == CAMERA && resultCode (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, { super.onActivityResult(requestCode, resultCode, data) if (requestCode == PHOTO && resultCode
Activity使用 startActivityForResult() 开启目标Activity后,当目标Activity销毁时,会向上一级Activity回传数据,并回调上一级 Activity的 onActivityResult 我们需要重写上一级Activity的 onActivityResult() 方法获取回传数据。 //重写上一级Activity的onActivityResult()方法来获取目标Activity回传的数据 //三个形参,请求码、结果码、目标Activity回传的Intent @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { //调用基类的方法,此句代码会自动生成 super.onActivityResult(requestCode, resultCode, data); if(requestCode==1){ //如果请求码是当前Activity
selectedPhotoNum",adapter.getItemCount()); intent.putExtras(bundle); startActivityForResult(intent,10); 在onActivityResult () @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("Alex","mainActivity的onActivityResult
同时文档也说了,qq分享呢也必须要带上图片,不然会分享失败 注意: 最后在分享所在的Activity里复写onActivityResult方法,注意不可在fragment中实现,如果在fragment 中调用分享,在fragment依赖的Activity中实现,如果不实现onActivityResult方法,会导致分享或回调无法正常进行 @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode , data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); } 然后我写完之后
startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE); } 最后我们在onActivityResult 代码如下: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult } } PS:ValueCallbacks是WebView组件通过openFileChooser()或者onShowFileChooser()提供给我们的,它里面包含了一个或者一组Uri,然后我们在onActivityResult true; } }); 大家应该注意到onShowFileChooser()中的ValueCallback包含了一组Uri(Uri[]),所以针对5.0及以上系统,我们还需要对onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode
RESULT_CANCELED setResult(RESULT_OK, intent); finish(); } }); 在FirstAcitvity中重写onActivityResult 方法 FirstAcitvity.class protected void onActivityResult(int requestCode, int resultCode, Intent data) String returnedData = data.getStringExtra("data_return"); Log.d(TAG, "onActivityResult
; //开启摄像机 startActivityForResult(intent, VIDEO_REQUEST); } 在摄像机页面录像结束,返回到上一页时回调onActivityResult 方法,所以需要重写上个页面的onActivityResult方法,在该方法中把摄像结果传给h5网页。 下面是回传视频的处理代码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult null : data.getData(); Log.d(TAG, "onActivityResult path="+result.getPath());