首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Fragment中调用startActivityForResult的那些坑

:从哪里发起调用,最终就会走到哪里。...源码分析 直接调用startActivityForResult (1)发起startActivityForResult调用 这种情况会直接调用到Fragment的startActivityForResult...和requestCode关联起来了 这样后面回调onActivityResult方法时就可以根据requestCode获取对应的Fragment,以便调用Fragment的onActivityResult...(intent, requestCode); } 所以从源码也可以看出,这种方式最后不会回调Fragment的onActivityResult方法 总结 在Fragment中调用startActivityForResult...返回结果 这种情况和上面的是一样的,从上面的源码中我们可以看到,在哪个Fragment发起的startActivityForResult调用,只要父Activity的onActivityResult方法调用了

2K10

再见 onActivityResult!你好 Activity Results API

Activity获取数据,传统的方式是使用startActivityForResult方法来启动下一个Activity,然后通过onActivityResult方法来接收返回的结果。...("title") Log.e("yhj", "onActivityResult: " + title) } } 这种方式不仅能在同一个应用中获取数据,也可以从其它应用中获取数据...,例如调用系统相机,相册获取图片,获取系统通讯录等。...并且推出了一种新的APIActivity Results API。 介绍 Activity Results API 是 Google官方推荐的Activity、Fragment获取返回结果的方式。...调用系统相机拍照,返回为Bitmap的图片。 TakeVideo()。调用系统录像拍摄视频,保存到给定的Uri地址,返回一张缩略图。 PickContact()。从手机通讯录获取联系人。

1.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Activity Result API详解,是时候放弃startActivityForResult了

    我们完全移除了对onActivityResult()方法的重写,而是调用registerForActivityResult()方法来注册一个对Activity结果的监听。...第二个参数是一个Lambda表达式,当有结果返回时则会回调到这里,然后我们在这里获取并处理数据即可。...这样我们就不需要再调用startActivityForResult()方法了,而是直接调用launch()方法,并把Intent传入即可。 这两种写法到底孰优孰劣呢?...而这两个方法的作用也非常明显。createIntent()就是用于创建一个Intent,后续会使用这个Intent来发起动作,比如启动另外一个Activity去获取数据,或者打开相机去拍照等等。...但是我们在调用startActivityForResult()方法时,除了传入Intent之外,还需要再传入一个requestCode,用于在多个任务之间进行区分。

    1.9K30

    Adnroid体系与系统架构

    1.用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。...2.用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。...Android四大组件是如何协同工作 Intent Activity作为人机交换的第一界面,负责向用户展示信息和处理结果,而这些信息的来源可以通过资源获取,也可以通过ContentProvider来获取其他应用的信息...,或者Service从后台获取,当然了也可以是通BroadCastReciever获取到的广播信息。...所以,我们可用直接在Activity中直接通过this的方式获取Context对象,而在匿名内部类中,就必须使用 XXXActivity.this的方式才可以获取Context对象。

    39110

    Activity Result API详解,是时候放弃startActivityForResult了「建议收藏」

    我们完全移除了对onActivityResult()方法的重写,而是调用registerForActivityResult()方法来注册一个对Activity结果的监听。...第二个参数是一个Lambda表达式,当有结果返回时则会回调到这里,然后我们在这里获取并处理数据即可。...这样我们就不需要再调用startActivityForResult()方法了,而是直接调用launch()方法,并把Intent传入即可。 这两种写法到底孰优孰劣呢?...而这两个方法的作用也非常明显。createIntent()就是用于创建一个Intent,后续会使用这个Intent来发起动作,比如启动另外一个Activity去获取数据,或者打开相机去拍照等等。...但是我们在调用startActivityForResult()方法时,除了传入Intent之外,还需要再传入一个requestCode,用于在多个任务之间进行区分。

    1.1K30

    【Android基础】利用Intent在Activity之间传递数据

    从一个Activity获取返回结果: 启动一个Activity不仅仅是startActivity(Intent intent)一种方法,你也可以通过startActivityForResult()启动一个...注意:在调用startActivityForResult()时你可以利用显示Intent或者隐式Intent,但是在你能够利用显式Intent的时候尽量利用显式Intent,这样能够保证返回的结果是你期待的正确结果...下面是一个调用startActivityForResult()获取联系人的例子: static final int PICK_CONTACT_REQUEST = 1; // The request...之前调用startActivityForResult()方法,如果你在onResume之前调用了,那么所在的Activity就无法显示,直到启动的那个Activity退出然后返回结果,这是为了避免在重新定向到另外...如果是你自己写的Intent作为返回结果你会很清楚,但是如果是调用的系统APP(相机,联系人等),那么Intent返回结果格式你应该清楚的知道。

    1.6K60

    startActivityForResult被标记为弃用后,如何优雅的启动Activity?

    可以明显的看到,在androidx.activity1.2.0-alpha04时开始,Android中这位你调用过无数次的startActivityForResult和onActivityResult,...而使用registerForActivityResult()可以多次调用以注册多个 ActivityResultLauncher 实例,用来处理不同的Activity结果,让代码更便于维护。...通过Intent.ACTION_GET_CONTENT获取一个文件(这个方法可以通过android.content.ContentResolver.openInputStream获取到文件的原始数据)...MIME类型 文件List PickContact 通过Intent.ACTION_PICK从系统通讯录中获取联系人 null(Void) 联系人Uri StartIntentSenderForResult...原因二,是若想自己调用,使用其实也很简单,只需调用Android提供的这些默认协定即可。

    3.2K20

    Android-图片的选择,裁剪,压缩,适配高版本

    //使用INTERNAL_CONTENT_URI只能显示存储在内部的照片 intent.setDataAndType( MediaStore.Images.Media.INTERNAL_CONTENT_URI..., "image/*"); //返回结果和标识 startActivityForResult(intent, PHOTO_PHOTOALBUM...); .拍照或选取图片的返回结果 不论是拍照还是选取图片,我们都要在Activity的onActivityResult中去获取返回结果,然后进行下一步操作。...原来7.0一下版本我们,直接调用相机获取的图片地址是: file:///storage/emulated/0/temp.jpg的文件 然而7.0之后就变成: content://........文件...,使用 content://代替了 file:/// 这是因为:Android 为了提高私有文件的安全性,从 7.0 开始对外传递file://类型的uri会触发FileUriExposedException

    1.5K30

    【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    向Intent对象中存放bundle对象的时候 , 直接调用Intent的putExtra()方法即可; 从Intent对象取出数据 :  取出Bundle对象 : Bundle bundle = intent.getBundleExtra...()方法 , 获取Intent对象 , 在调用Intent对象的方法获取数据; ①获取Bundle对象 , 并从Bundle对象中获取数据 :  Bundle bundle = this.getIntent...Bundle对象的方法 : getBundleExtra("key");从Bundle中获取数据的方法 : bundle.getString("key")调用相应数据类型的方法; ②获取Intent对象中的数据...在Activity B 中需要调用setResult()方法 , 设置返回的Intent , 同时注意要finish()掉这个Activity; 相关参数 :  startActivityForResult...; setResult(int resultCode, Intent intent) : 第一个参数是结果码 , 用于 A 中的onActivityResult()中的Intent对象识别.

    48230

    Android-使用Intent传递数据

    思路很简单,Intent提供了一系列putExtra()方法的重载, 可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后, 再把这些数据从Intent中取出就可以了。...("extra_data"); Log.d("SecondActivity",data); 首先通过getIntent()方法获取到用于启动SecondActivity的Intent, 然后调用...返回数据给上一个活动 Activity中还有一个StartActivityForResult()方法也是用于启动活动的, 但这个方法期望在活动被销毁的时候能够返回一个结果给上一个活动。...由于在一个活动中有可能调用startActivityForResult()方法启动很多不同的活动, 每一个活动返回的数据都会回调onActivityResult()方法,因此需要先判断requestCode...的值来判断数据来源, 确定数据是从SecondActivity返回的,在通过resultCode值来判断处理结果是否成功, 最后从data中取值打印出来。

    1.2K30

    【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )

    (Intent intent) 方法中主要调用 void startActivity(Intent intent, @Nullable Bundle options) 重载方法 ; @Override...options) 中 , 最终调用了 void startActivityForResult(@RequiresPermission Intent intent, int requestCode) 方法...启动 Activity ; void startActivityForResult(@RequiresPermission Intent intent, int requestCode) 方法最终也是调用..., 只要是调用反射方法 , 或者访问反射的成员字段 , 第一件事就是设置可访问性 ; 正常可访问的方法或字段 , 绝对不会使用反射获取 , 既然使用了反射 , 那么设置可访问性是标配操作 ;..., 档 Activity 调用 Instrumentation mInstrumentation 成员时 , 其实调用的是开发者开发的代理类 ; 在 Android 界面跳转时 , 会自动回调 Activity

    94030

    Android | Activity 启动流程分析

    : 上面代码中通过 getService 获取到 Binder 对象,然后将 Binder 转成 AIDL 接口所属的类型,接着就可以调用 AIDL 中的方法与服务端进行通信了。...接着调用 ATMS 中的 startActivity() 方法发起启动 Activity 请求,获得启动结果 result。...Activity,所以最开始执行的是 ON_CREATE 状态,也就是 handleLaunchActivity 方法, 而 mTransactionHandler 则是从构造方法中传入的,所以这里调用你的就是...总结一下流程 调用 Activity 的 startActivity 方法来启动目标 Activity 接着就会调用到 Instrunmentation 的 execStartActivity 方法,通过获取...ATMS 的 binder 代理对象,然后调用到 ATMS 的 startActivity 中去 调用到 ATMS 中后,会执行到ActivityStarter 的 execute 方法,内部最终执行到了

    83120

    安卓开发_startActivityForResult的详细用法

    一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据 百度了一下,发现startActivityForResult这个很完美的符合了我的效果要求..."); //获取change01 对应的数据 61 String change02 = data.getStringExtra("change02"); //获取...注意这个值,即第二个参数必须是字符串类型的 20 // 设置结果,并进行传送 21 this.setResult(resultCode, intent);...请求码的作用     使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult...结果码的作用 在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity

    89960

    Android 蓝牙4.0代码解析

    Intent intent = new Intent(本窗体.this, 跳转的目的窗体.class); startActivityForResult(Intent intent, int requestCode...以便确定返回的数据是从哪个Activity中返回 代码写在旧窗体,在旧窗体里new 2个Intent(目的窗体时2个不同的新窗体),requestCode用来区分是向哪个新窗体传消息,当离开旧窗体切换到新窗体时消息显示在新窗体中...,是以便确认返回的数据是从哪个Activity返回的。...总结:旧窗体通过startActivityForResult(intent, requestCode)方法的requestCode来标识信息(intent中)传给2个不同的新窗体,信息在新窗体中显示;新窗体在自己的窗体类中用...在Service中需要创建一个实现IBinder的内部类(这个内部类不一定在Service中实现,但必须在Service中创建它)。

    1.1K50
    领券