Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用uri schme和返回值的Android应用到应用_Android - Fatal编程技术网

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

使用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

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

在虚拟应用程序中,当用户单击按钮时,我希望返回到我的应用程序,并返回一个值

你认为有可能吗

在Dummy App中,我进行如下配置:

<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方案重定向到虚拟应用。不像你建议的那样。谢谢你的代码。我必须将目标包名称放入意图中,它将起作用。在你的代码中,你没有,它仍然为你工作?