SetResult()回到DEEP LINKING中的调用活动?

问题描述 投票:7回答:4

我正在Android应用程序中实现Deep Linking。假设我使用PhonePe进行付款并选择使用其他应用程序付款并选择我的应用程序。

Intent intent = new Intent().
intent.setData("the data");
startactivityforresult(intent, 111);

然后用户选择我的应用程序和我的启动画面,然后我转到这样的其他活动

Intent i = new Intent(Splashscreen.this, FirstActivity.class);
startactivity(i);
finish();

然后到这样的其他活动 -

Intent i2 = new Intent(FirstActivity.this, SecondActivity.class);
startactivity(i2);
finish();

在SecondActivity中经过一段时间后,我将结果发送回调用活动或这里的PhonePe -

Intent backintent = new Intent();
backintent.putExtra("somekey", "somevalue");
setResult(Result.OK, backintent);

现在,当我的应用程序关闭并返回到Phoneme时,Phonepe收到的数据为空。

但是,如果我与其他只有一个活动的Application做同样的事情,那么调用活动捕获的数据不是null并且工作正常。

我想知道如何将数据发送回调用活动。我只能在同一个应用程序中发送数据。

开始活动时是否必须使用其他标签?

android deep-linking
4个回答
7
投票

您还需要使用startActivityForResult方法启动任何新活动,然后将结果传回setResult调用链,将其放入onActivityResult并再次使用setResult进行设置。


5
投票

更详细的描述

我们必须以startActivityForResult开始活动。顾名思义,它会给你一些结果。此结果将来自您从此处启动的另一项活动。

例如:MainActivity类

   Intent intent=new Intent(MainActivity.this,SecondActivity.class);  
            startActivityForResult(intent, 2);// Activity is started with requestCode 2  

onActivityResult方法中获取结果。

// Call Back method  to get the Message form other Activity  
    @Override  
       protected void onActivityResult(int requestCode, int resultCode, Intent data)  
       {  
                 super.onActivityResult(requestCode, resultCode, data);  
                  // check if the request code is same as what is passed  here it is 2  
                   if(requestCode==2)  
                         {  
                            String message=data.getStringExtra("MESSAGE");   
                            textView1.setText(message);  
                         }  

SecondActivity类

将此活动的结果发送到您启动的上一个活动。

  Intent intent=new Intent();  
                intent.putExtra("MESSAGE", "your message");  
                setResult(2,intent);  
                finish();//finishing activity  

3
投票

您只能将结果发送回startActivityForResult调用的活动 在你的情况下,像这样

PhonePe Activity - > Splash Activity - > 2nd Activity - > PhonePe Activity

一个StartActivityForResult对于你的情况是不够的,因为如果你想要发送回数据你必须从泼水活动而不是第二次活动发送它,那么PhonePe会调用你的启动活动

或者使用这个技巧

PhonePe活动< - >启动活动< - >第二活动

  1. 当您从Ph​​onePe接到电话时,请开始第二个活动以获得结果
  2. 当完成2活动时,将结果发送回Splash Activity
  3. 当您从Splash活动的第二个活动获得结果时,将结果发送回PhonePe

一些代码 从启动活动启动SecondActivity

Intent intent=new Intent(SplashActivity.this,SecoundActivity.class);
    intent.putExtra("SomeKey","SomeValue");
    startActivityForResult(intent,REQUEST_CODE);

在Splash Activity上处理结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    setResult(requestCode,data);
}

关于发送回结果的第二个活动 如果操作完成

setResult(Activity.RESULT_OK,data);

如果操作失败

setResult(Activity.RESULT_CANCELED,data);

注意

第二个Activity将结果发送回splash Activity,同样的结果从Splash Activity发送回PhonePe


0
投票

startActivityForResult改为onActivityResult

© www.soinside.com 2019 - 2024. All rights reserved.