使用uri schme和返回值的Android应用程序到应用程序



在Android中,我正试图通过虚拟应用程序的uri方案从我的应用程序中调用另一个虚拟应用程序。

当用户点击一个按钮时,我想从虚拟应用程序返回一个返回值。

你认为有可能吗?

在Dummy应用程序中,我进行如下配置:

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:scheme="myapp"
android:host="my-poc-application.com"
android:pathPrefix="/id" />
</intent-filter>

从我的应用程序中,我尝试重定向到我的虚拟应用程序:

字符串方案="myapp";字符串host="my poc application.com";字符串id="8";Uri Uri=Uri.parse(scheme+"://"+host+"/"+id(;Intent Intent=新的Intent(Intent.ACTION_VIEW,uri(;//验证它是否解析PackageManager PackageManager=getPackageManager((;List activities=packageManager.queryIntentActivities(intent,0(;boolean isIntentSafe=activities.size((>0;//在安全的情况下开始一项活动if(isIntentSafe({startActivityForResult(intent,1(;}

但是没有调用伪应用程序。

这是我的尝试:

在目标应用程序的活动中注册意向过滤器:

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:scheme="target-app"
android:host="target-app.com" />
</intent-filter>
</activity>

注意:您不需要pathPrefix

在目标应用程序的主要活动中:

btnGoBack.setOnClickListener{
val resultIntent = Intent()
resultIntent.putExtra("Result", "I am the result from target app")
setResult(1000, resultIntent)
finish()
}
//Read the id you sent while calling this app
val uri = intent.data
Toast.makeText(this, uri?.path.toString(), Toast.LENGTH_SHORT).show()

注意:uri?。路径将包含您传递的/id,在您的示例中为8

现在,在父应用程序中,您将从那里调用此目标应用程序:

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnOpen.setOnClickListener{
val scheme = "target-app"
val host = "target-app.com"
val id = "8"
val uri = Uri.parse("$scheme://$host/$id")
val intent = Intent(Intent.ACTION_VIEW, uri)
// Verify it resolves
val activities = packageManager.queryIntentActivities(intent, 0)
val isIntentSafe = activities.size > 0
// Start an activity if it's safe
if (isIntentSafe) {
startActivityForResult(intent, 1)
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == 1000){
Toast.makeText(this, data?.getStringExtra("Result"), Toast.LENGTH_SHORT).show()
}
}

该活动有一个名为btnOpen的按钮。

onActivityResult中,我们得到了从目标应用程序发送的结果。

这段代码在kotlin中,将其转换为java应该很简单。

如果你还有其他问题,一定要告诉我。

问候,

Priyabrata

最新更新