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

时间:2017-12-12 10:39:20

标签: android deep-linking

我正在Android应用程序中实现DeepLinking。假设我使用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收到的数据为空。

但是,如果我对其他只有一个活动的应用程序执行相同的操作,则调用活动捕获的数据不为空并且工作正常。

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

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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  

答案 2 :(得分:3)

您只能将结果发送回 startActivityForResult 的活动 叫做

在你的情况下,这样跟着

  

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

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

或使用此技巧

  

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

  1. 当您接到来自PhonePe的电话时,请开始第二个活动以获得结果
  2. 当完成2活动时,将结果发送回Splash Activity
  3. 当您从Splash活动的第二个活动中获得结果时,将结果发送回PhonePe
  4. 部分代码
    从启动活动启动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);
    



      

    注意

         

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

答案 3 :(得分:0)

startActivityForResult更改为onActivityResult