我正在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并且工作正常。
我想知道如何将数据发送回调用活动。我只能在同一个应用程序中发送数据。
开始活动时是否必须使用其他标签?
您还需要使用startActivityForResult
方法启动任何新活动,然后将结果传回setResult
调用链,将其放入onActivityResult
并再次使用setResult
进行设置。
更详细的描述
我们必须以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
您只能将结果发送回startActivityForResult调用的活动 在你的情况下,像这样
PhonePe Activity - > Splash Activity - > 2nd Activity - > PhonePe Activity
一个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);
注意
第二个Activity将结果发送回splash Activity,同样的结果从Splash Activity发送回PhonePe
将startActivityForResult
改为onActivityResult
。