使用uri schme和返回值的Android应用到应用
在Android中,我试图通过虚拟应用的uri方案从我的应用调用另一个虚拟应用 在虚拟应用程序中,当用户单击按钮时,我希望返回到我的应用程序,并返回一个值 你认为有可能吗 在Dummy App中,我进行如下配置:使用uri schme和返回值的Android应用到应用,android,Android,在Android中,我试图通过虚拟应用的uri方案从我的应用调用另一个虚拟应用 在虚拟应用程序中,当用户单击按钮时,我希望返回到我的应用程序,并返回一个值 你认为有可能吗 在Dummy App中,我进行如下配置: <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEF
<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>
从我的应用程序中,我尝试重新定向到我的虚拟应用程序:
String scheme = "myapp";
String host = "my-poc-application.com";
String id = "8";
Uri uri = Uri.parse(scheme + "://" + host + "/" + id);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivityForResult(intent, 1);
}
字符串scheme=“myapp”;
String host=“my poc application.com”;
字符串id=“8”;
Uri=Uri.parse(scheme+“://”+host+“/”+id);
意图=新意图(Intent.ACTION\u视图,uri);
//验证它是否已解决
PackageManager PackageManager=getPackageManager();
列表活动=packageManager.QueryInputActivities(intent,0);
布尔值isIntentSafe=activities.size()>0;
//如果安全的话,开始一项活动
如果(isIntentSafe){
startActivityForResult(意向,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>
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()
}
}
注意:uri?.path将包含您传递的/id,在您的示例中为8
现在,在父应用程序中,您将从中调用此目标应用程序:
<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>
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是的,这在android中是可能的。那么现在的问题是什么呢?谢谢@KaushikBurkule。我现在的问题是如何在代码中实现它?我用代码更新了我的问题。你能帮忙吗?你需要确保你的第二个应用程序必须监听你的呼叫。在你的第二个应用中试试这个,我的问题是使用虚拟应用的uri方案重定向到虚拟应用。不像你建议的那样。谢谢你的代码。我必须将目标包名称放入意图中,它将起作用。在你的代码中,你没有,它仍然为你工作?