:从哪里发起调用,最终就会走到哪里。...源码分析 直接调用startActivityForResult (1)发起startActivityForResult调用 这种情况会直接调用到Fragment的startActivityForResult...和requestCode关联起来了 这样后面回调onActivityResult方法时就可以根据requestCode获取对应的Fragment,以便调用Fragment的onActivityResult...(intent, requestCode); } 所以从源码也可以看出,这种方式最后不会回调Fragment的onActivityResult方法 总结 在Fragment中调用startActivityForResult...返回结果 这种情况和上面的是一样的,从上面的源码中我们可以看到,在哪个Fragment发起的startActivityForResult调用,只要父Activity的onActivityResult方法调用了
Activity获取数据,传统的方式是使用startActivityForResult方法来启动下一个Activity,然后通过onActivityResult方法来接收返回的结果。...("title") Log.e("yhj", "onActivityResult: " + title) } } 这种方式不仅能在同一个应用中获取数据,也可以从其它应用中获取数据...,例如调用系统相机,相册获取图片,获取系统通讯录等。...并且推出了一种新的APIActivity Results API。 介绍 Activity Results API 是 Google官方推荐的Activity、Fragment获取返回结果的方式。...调用系统相机拍照,返回为Bitmap的图片。 TakeVideo()。调用系统录像拍摄视频,保存到给定的Uri地址,返回一张缩略图。 PickContact()。从手机通讯录获取联系人。
我们完全移除了对onActivityResult()方法的重写,而是调用registerForActivityResult()方法来注册一个对Activity结果的监听。...第二个参数是一个Lambda表达式,当有结果返回时则会回调到这里,然后我们在这里获取并处理数据即可。...这样我们就不需要再调用startActivityForResult()方法了,而是直接调用launch()方法,并把Intent传入即可。 这两种写法到底孰优孰劣呢?...而这两个方法的作用也非常明显。createIntent()就是用于创建一个Intent,后续会使用这个Intent来发起动作,比如启动另外一个Activity去获取数据,或者打开相机去拍照等等。...但是我们在调用startActivityForResult()方法时,除了传入Intent之外,还需要再传入一个requestCode,用于在多个任务之间进行区分。
)/onResume()过程中 * 活动,则在显示结果之前不会显示窗口 * 从已启动的活动返回。...为此,重写此方法以捕获对start的调用 * 活动,以便返回包含结果的新ActivityResult * 您希望应用程序能够看到,并且不要调用超级用户 * 班级。...* @param token 标识要启动的系统的内部令牌活动;可能为空。...* @param target 哪个活动正在执行启动(并因此接收任何结果);如果未进行此调用,则可能为null从一项活动中。 * @param intent 启动的实际意图。...(); intent.prepareToLeaveProcess(who); // 在此处调用 AMS , Binder 机制获取 AMS int
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对象。
背景 在Android应用程序开发中,启动一个Activity不一定是单项操作,从启动的Activity获取数据是常见的场景,最传统的方式是通过Intent携带数据,然后使用startActivityForResult...方法来启动下一个Activity,然后通过onActivityResult来接收返回的结果,代码如下: 调用startActivityForResult方法启动 startActivityForResult...} } 以上方式,onActivityResult就能获取从上一个界面返回的数据,这种方式非常有用,不仅能同一个应用中,也可以从其他应用中获取数据,比如我们常见的,调用系统相机、相册获取照片...中更好的获取返回结果呢?...Results API 获取Activity返回的结果 1.
从一个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返回结果格式你应该清楚的知道。
可以明显的看到,在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提供的这些默认协定即可。
如何启动一个新的 Activity,并获取返回值? 你的答案肯定是 startActivityForResult 和 onActivityResult 。...中获取的结果。...上面的例子中,prepare() 方法传入的协议实现类是 StartActivityForResult 。它是 ActivityResultContracts 类中的静态内部类。...代替 startActivityForResult() 的就是 ActivityResultLauncher.launch()方法,最后会调用到 ActivityResultRegistry.invoke...toast("take picture : $result") } pictureCustomBt.setOnClickListener { takePictureCustom()} 这样就可以调用系统相机拍照并在结果回调中拿到
//使用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
向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对象识别.
思路很简单,Intent提供了一系列putExtra()方法的重载, 可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后, 再把这些数据从Intent中取出就可以了。...("extra_data"); Log.d("SecondActivity",data); 首先通过getIntent()方法获取到用于启动SecondActivity的Intent, 然后调用...返回数据给上一个活动 Activity中还有一个StartActivityForResult()方法也是用于启动活动的, 但这个方法期望在活动被销毁的时候能够返回一个结果给上一个活动。...由于在一个活动中有可能调用startActivityForResult()方法启动很多不同的活动, 每一个活动返回的数据都会回调onActivityResult()方法,因此需要先判断requestCode...的值来判断数据来源, 确定数据是从SecondActivity返回的,在通过resultCode值来判断处理结果是否成功, 最后从data中取值打印出来。
(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
Hook原理 创建一个代理对象,然后把原始对象替换为我们的代理对象,这样就可以在这个代理对象为所欲为,修改参数或替换返回值。 正常的调用和返回: ? Hook的调用和返回: ?...= null) { startActivityForResult(intent, -1, options); } else { startActivityForResult...(intent, -1); } } // Step3 public void startActivityForResult(@RequiresPermission Intent intent,...实现execStartActivity方法,并在内部通过反射调用Instrumentation的execStartActivity方法 */ public class InstrumentationProxy..., -1, options); } Hook点分析: 调用ActivityThread的getInstrumentation方法获取Instrumentation。
: 上面代码中通过 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 方法,内部最终执行到了
一个需求:一个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
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中创建它)。
创建一个WebViewActivity的内部类 ---- public class XHSWebChromeClient extends WebChromeClient { // For Android...因为我们前面是使用startActivityForResult来打开的选择页面,我们会在onActivityResult中接收到选择的结果。...ValueCallback的onReceiveValue方法,将结果传回web。...选择文件会使用系统提供的组件或者其他支持的app,返回的uri有的直接是文件的url,有的是contentprovider的uri,因此我们需要统一处理一下,转成文件的uri,可参考以下代码(获取文件的路径...equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } } 再有,即使获取的结果为
领取专属 10元无门槛券
手把手带您无忧上云