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

MainActivity.OnActivityResult(int,Result,Intent)':在Xamrine中找不到要重写的合适方法

MainActivity.OnActivityResult(int, Result, Intent) 方法是 Android 开发中的一个回调方法,用于处理从其他活动(Activity)返回的结果。这个方法在较新的 Android 版本中已经被弃用,取而代之的是使用 registerForActivityResult API。

基础概念

OnActivityResult 是 Android 中的一个生命周期方法,当启动的子活动(通过 startActivityForResult 方法)返回结果时,会调用这个方法。它包含三个参数:

  • requestCode:请求码,用于标识请求的来源。
  • resultCode:结果码,表示子活动的执行结果。
  • data:返回的数据,通常是一个 Intent 对象。

为什么在 Xamarin 中找不到要重写的合适方法

在 Xamarin.Android 中,OnActivityResult 方法可能没有正确地被识别或重写,这通常是因为:

  1. 方法签名不匹配:确保方法签名与 Xamarin.Android 的要求完全一致。
  2. 目标框架版本:确保你的项目目标框架版本支持 OnActivityResult 方法。
  3. Xamarin 版本:确保你使用的 Xamarin 版本是最新的,或者至少是兼容的。

解决方法

由于 OnActivityResult 已经被弃用,推荐使用 registerForActivityResult API。以下是如何在 Xamarin.Android 中使用 registerForActivityResult 的示例:

代码语言:txt
复制
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Widget;
using androidx.activity.result;
using androidx.appcompat.app.AppCompatActivity;

namespace YourNamespace
{
    [Activity(Label = "MainActivity")]
    public class MainActivity : AppCompatActivity
    {
        private ActivityResultLauncher<Intent> activityResultLauncher;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            activityResultLauncher = RegisterForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result =>
                {
                    if (result.ResultCode == Result.Ok)
                    {
                        Intent data = result.Data;
                        // 处理返回的数据
                    }
                });

            Button button = FindViewById<Button>(Resource.Id.button);
            button.Click += (sender, e) =>
            {
                Intent intent = new Intent(this, typeof(SecondActivity));
                activityResultLauncher.Launch(intent);
            };
        }
    }
}

参考链接

通过这种方式,你可以更现代、更简洁地处理活动间的结果传递。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

让 Android WebView 支持 type 为 file input,同时支持拍照

目标对象:WebChromeClient 实例化一个目标对象,并重写几个隐藏方法(针对不同Android系统版本,方法名和入参都不一样,所以方法有多个),然后将目标对象作为参数传递给 WebView...    1、所有被重写方法最后都会调用 selPic 方法,这个方法会显示一个对话框,让用户选择是拍照选取照片还是直接从已保存文件中选取图片。    ...用于 onActivityResult 方法识别出是执行了拍照选取流程。...方法识别出是执行了从已保存文件中选取图片文件流程。.../** * 解决拍照后相册找不到问题 */ private void addImageGallery(String path) { if (null == path || "".equals

1.6K20

Android WebView调用本地相册方法

本文实例为大家分享了Android WebView调用本地相册具体实现方法,供大家参考,具体内容如下 首先要知道android本身WebView是并不支持调用手机文件并上传,其次WebView内核...android每次更新时候都是不太一样,也是够坑爹;不过需求又不能改,H5需要调用系统相册,还好最后还是找到方法解决了,就是重写里面的一个方法,不过这种情况也是5.0之前有效,5.0之后就需要重写另外一个方法...,先将这些方法一个个列出 注意在这里我们需要重写方法是在这个WebChromeClient类里面的; private ValueCallback<Uri mUploadMessage; private...); } 值得注意是这三种方法都是一样,只是不同版本下会分别调用,还有就是这个方法重写这个WebChromeClient类里面的,别以为是我们随便写,只是google不希望我们重写这个方法罢了...5.0情况下用: private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) { if (

2.9K10
  • 浅谈关于Android WebView上传文件解决方案

    我们开发需求时候,难免会接入一下第三方H5页面,有些H5页面是具有上传照片功能,Android WebView是不能直接打开文件选择弹框 接下来我讲简单提供一下解决方案,先说一下思路...1.接收WebView打开文件选择器通知 2.收到通知后,打开文件选择器等待用户选择需要上传文件 3.onActivityResult得到用户选择文件Uri 4.然后把Uri传递给Html5...(true); 当H5调用上传文件Api时候,WebView会回调 openFileChooser和onShowFileChooser 方法来通知我们,我们这个时候要做就是重写这个方法 需要注意是这个方法不同...方法先保存了一下ValueCallback回调对象,这个对象最后用来通知H5文件地址,我们之后调用openFileChooser方法来打开文件选择器 private void openImageChooserActivity...); } 当用户选择完文件后,会调用onActivityResult方法,我们重写并等待回调 @Override protected void onActivityResult(int requestCode

    3.6K41

    Android-使用Intent传递数据

    Intent取值, 第二个参数是传递数据。...返回数据给上一个活动 Activity还有一个StartActivityForResult()方法也是用于启动活动, 但这个方法期望活动被销毁时候能够返回一个结果给上一个活动。...(); 还是构建了一个Intent,不过这个Intent仅仅用于传递数据而已, 没有指定任何“意图”,把传递数据存放在Intent,调用setResult()方法, 专门用于向上一个活动返回数据...由于使用是startActivityForResult()方法启动SecondActivity, 在被销毁之后会回调上一个活动onActivityResult()方法,因此需要重写这个方法:...如果在SecondActivity不是通过按钮点击返回,而是按下Back键, 可以SecondActivity重写onBackPressed()方法解决问题: @Override public

    1.2K30

    Android startActivityForResult用法

    二、示例 1、使用系统提供startActivityForResult(Intent intent, int requestCode)方法打开新Activity,为了得到传回数据,必须在Activity...重写onActivityResult(int requestCode, int resultCode, Intent data)方法用来接收返回数据: public class MainActivity...intent, int requestCode)方法打开新Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供setResult(int resultCode...我们只需重写onActivityResult(int requestCode, int resultCode, Intent data)方法,根据请求码和返回码进行判断,然后进行相应处理。...我们一般使用setResult(RESULT_OK, intent);将我们返回码设置为RESULT_OK = -1,这样可以避免无用判断 注意:Fragment中使用startActivityForResult

    35820

    优雅监听onActivityResult

    一、思考 当Activity A启动一个Activity B后,B finish,我们可能需要处理B返回值,此时,我们可能就需要用到了onActivityResult,需要在Activity A重写实现...当然,在这种前提是我们处理逻辑都是放在Activity A类,那么假如我们是一个其他类,不是Activity或者Fragment情况呢?...当我看到Google开源lifecycle库HolderFragment做法,感觉眼前一亮。Activity或者Fragment添加一个空壳Fragment,作为一个生命周期监听。...(int resultCode, Intent data) { // to handle result.... } }); [image.png] 四、结合Rxjava 可能需求逻辑会比较复杂,可能需要连续处理...以上实现基础上,ListenActivityResultRequest增加一个返回Observable方法

    2.1K70

    Android开发笔记(一百六十六)H5通过WebView录像上传

    与拍照上传一样,摄像上传也要重写WebChromeClientopenFileChooser/onShowFileChooser方法,在这两个方法内部跳转到系统摄像机页面,示例代码如下:    ...intent, VIDEO_REQUEST);     } 摄像机页面录像结束,返回到上一页时回调onActivityResult方法,所以需要重写上个页面的onActivityResult方法方法把摄像结果传给...下面是回传视频处理代码:     @Override     protected void onActivityResult(int requestCode, int resultCode, Intent...= RESULT_OK ?...点击占位图标上三角符号,则网页开始播放已上传摄像视频,下面的图片正是播放过程截图: ? 点此查看Android开发笔记完整目录

    1.3K20

    (转载非原创)Android系统编程入门系列之界面Activity交互响应

    视图中重写界面响应三个方法后,如果返回结果为true,则上文界面响应三个方法将不会被回调。 为什么需要封装一层响应方法呢?...经历了事件分发和事件处理之后,这样一个事件传递机制就算完成了。而上文提到每一个事件,都是如此。 上述过程代码实现,只需要针对事件分发、事件拦截和事件处理分别定义一个可重写方法即可。...能够重写方法位置主要是android.app.Acitivty和android.view.View,由于事件拦截只会发生在子视图传递过程界面并不需要,所以事件拦截对应方法android.view.GroupView...,系统会调用当前界面ActivityonActivityResult(int requestCode, int resultCode, Intent data)方法,因此可以重写方法。...所以可以重写onBackPressed()方法方法调用setResult(int resultCode, Intent data)设置上文提到返回时参数。

    41600

    Tinker-自定义扩展与流程分析(下)

    前言 上一篇我们讲解了Tinker使用,现在我们讲解下一些功能扩展与从源码角度查看流程分析。 ---- 功能扩展 扩展功能之前我们先来了解下。我们可以扩展那些功能。...其他代码不变,重新走一遍流程。就会看到效果生成 ---- 多渠道打包修复 还记得我们第一篇我们将所有关于多渠道打包代码都注释了,现在我们将注释代码放开,然后按照步骤。...下面我们就来看下这个接口实现类。还记得我们参数传入DefaultPatchListener吗?这个就是实现这个方法类。...我们可以重写这个方法,去实现我们自己校验,比如MD5检验等 也可以重写ShareConstants来实现我们自己错误码 protected int patchCheck(String path...相信大家对他们差别也有了一定认识。Tinker使用感觉还是有不少坑,但是相对于AndFix,Tinker支持比较全,并且支持微信上也使用。

    75910

    小白也能看懂插件化DroidPlugin原理(三)-- 如何拦截startActivity方法

    经过了前面两篇文章铺垫,终于可以玩点真刀实弹了,本篇将会通过 Hook 掉 startActivity 方法一个小例子来介绍如何找出合适 Hook 切入点。 ...接下来任务将变得非常简单,回忆一下上一篇博文《小白也能看懂插件化DroidPlugin原理(二)-- 反射机制和Hook入门》方案一,替换汽车引擎时我们继承原来汽车引擎类创建了一个新类,然后新引擎类拦截了最大速度方法...方法调用如果放到  MainActivity  attachBaseContext(...) 方法替换工作将不会生效,为什么? 调试发现,我们 attachBaseContext(..)...,而一个应用只有一个主线程,并且由源码可知,ActivityTreadd 对象又是以静态变量形式存在,太好了,这正是我们 Hook 点。...() 方法,而 ActivityTread 程序是以单例形式存在,这就是原因。

    1.1K60

    滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

    ,暂时骗过系统;然后到合适时候又替换回我们需要启动真正Activity;我们打开VirtualapkLibrary,查看清单文件,声明了各种启动模式Activity <!...AndroidManifest.xml里面声明一个替身Activity,然后合适时候把这个假替换成我们真正需要启动Activity 我们可以先启动一个已经AndroidManifest.xml...,VAInstrumentation 里面重写了execStartActivity,realExecStartActivity等方法,为什么重写这些方法?...我们前面说过,进行偷梁换柱,而这个地方就是execStartActivity以下代码 if (intent.getComponent() !...名字存储到intent,接着通过dispatchStubActivity方法,根据启动TargetActivity是什么启动模式来启动相应代理StubActivity private void

    1K20

    《移动互联网技术》第八章 消息与服务:掌握不同类型广播监听方式,以及创建通知方法

    ,是自定义接收器MyBroadcastReceiver,同样重写onReceive 函数。...Handler异步消息处理流程如下: a) 主线程创建一个Handler对象,并重写handleMessage()方法; b) 子线程需要进行UI操作时,创建一个Message对象,并通过Handler...AsyncTask泛型参数指示异步任务各种参数类型,这些参数包括:Params表示给后台任务传递参数;Progress是当前任务执行进度,可以界面上显示;Result指示任务完成后返回结果...Intent是立即执行某个动作,PendingIntent是延迟执行,它更加倾向于某个合适时机去执行某个动作。...只需要继承IntentService类,并且重写onHandleIntent 函数;onHandleIntent处理耗时任务,就不用担心 ANR问题,因为这个函数本身就在子线程运行。

    9010

    Android集成zxing扫码框架功能

    Activity子类来说, * 可以选择自己布局定义和CaptureActivity布局文件id相同控件, * 这样即使它们两个布局中表现不同也能执行相同逻辑,包括其他控件 * 或者选择重写...子类布局不一定包含id为title_bar和light_ll控件, //没有的话如果子类通过super.initListener()覆写时会因为找不到而报异常,所以这里加了一个判空; //如果子类布局包含...id相同控件,则不需要在子类重写相同逻辑 if (mTitleBar !...类,如果SurfaceViewid和CaptureActivity布局SurfaceViewid不同 //需要重写这个方法,返回自己布局SurfaceView public SurfaceView...布局ViewfinderViewid不同 //需要重写这个方法,返回自己布局ViewfinderView public ViewfinderView getViewfinderView() {

    1.2K41

    7.Activity

    创建新activity(活动) 新创建activity,必须在清单文件做配置,否则系统找不到显示时会直接报错 <activity android:name="com.itheima.createactivity.SecondActivity...,就会服务里<em>的</em>该<em>方法</em> @Override public <em>int</em> onStartCommand(<em>Intent</em> <em>intent</em>, <em>int</em> flags, <em>int</em> startId) { // TODO Auto-generated...<em>RESULT</em>_CANCELED这两个值 setResult(0, data); finish();//关闭掉当前<em>的</em>activity,才会返回数据 <em>在</em>开启者activity里面实现<em>方法</em>(必须现实此<em>方法</em>)...//1.需要新建一个 BaseActivity 继承自Activity,然后<em>在</em> BaseActivity<em>中</em><em>重写</em> onCreate()<em>方法</em>public class BaseActivity extends...然后<em>在</em> BaseActivity<em>中</em><em>重写</em> onDestroy()<em>方法</em>,并调用了 ActivityCollector<em>的</em> removeActivity()<em>方法</em>,表明将一个马上<em>要</em>销毁<em>的</em>活动从活动管理器里移除。

    1.3K150
    领券