SetResult() 回到在深度链接中调用 activity?

SetResult() back to calling activity in DEEP LINKING?

我正在我的 Android 应用程序中实施 DeepLinking。假设我正在使用 PhonePe 付款并选择使用其他应用程序和 select 我的应用程序付款。

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

然后用户 select 使用我的应用程序和我的初始屏幕然后我转到其他 activity 像这样

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

然后像这样给其他Activity -

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

然后在 SecondActivity 中的一段时间后,我将结果发送回调用 activity 或这里的 PhonePe,就像这样 -

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

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

但是,如果我对只有一个 activity 的其他应用程序做同样的事情,调用 activity 捕获的数据不为空并且工作正常。

我想知道如何将数据发送回调用 activity。 如果仅在 相同的应用程序 .

中,我可以发送数据

启动 activity 时是否必须使用其他标签?

您还需要使用 startActivityForResult 方法启动任何新的 activity,然后通过 setResult 调用链返回结果,将其放入 onActivityResult 并再次设置setResult.

更详细的描述

我们必须 activity 作为 startActivityForResult 开始。顾名思义,它将 return 你得到某种结果。此结果将来自您从此处启动的另一个 activity。

例如:MainActivity class

   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 class

将此 activity 的结果发送到您启动的前一个 activity。

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

您只能将结果发送回 activity,其中 startActivityForResult 称为

在你的情况下,如下所示

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

One StartActivityForResult 对你的情况来说是不够的,因为 PhonePe 调用你的 splash activity 如果你想发回数据你必须从 splash activity 发送它,不是来自第二 activity

或者使用这个技巧

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

  1. 当您接到来自 PhonePe 的电话时,开始第 2 个 Activity 结果
  2. 当 2 activity 完成时将结果发送回 Splash Activity
  3. 当您在 Splash 上从第 2 个 activity 获得结果时 activity 将结果发送回 PhonePe

部分代码
从 splash activity

开始 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);
}

第二次 activity 返回结果
如果操作完成

setResult(Activity.RESULT_OK,data);


如果操作失败

setResult(Activity.RESULT_CANCELED,data);



Note

2nd Activity send result back to splash Activity, and the same result send back to PhonePe from Splash Activity

startActivityForResult 更改为 onActivityResult