我正在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收到的数据为空。
但是,如果我对其他只有一个活动的应用程序执行相同的操作,则调用活动捕获的数据不为空并且工作正常。
我想知道如何将数据发送回调用活动。 我只能在相同的应用程序中发送数据。
开始活动时是否必须使用其他标签?
答案 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活动< - >启动活动< - >第二项活动
部分代码
从启动活动启动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
。