java - 如何使用来自另一个应用程序的 Intent 启动一个 Unity 应用程序?
问题描述
我尝试使用一些允许我创建意图的测试应用程序打开应用程序。但这不起作用,也不适用于我的代码。我对问题根源的猜测是 Unity 生成的清单文件。导出了 2 个项目,对 adb 等可见的包名在此清单中。
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:label="@string/app_name" android:icon="@mipmap/app_icon" />
</manifest>
此清单没有意图过滤器,并且由于该项目中没有任何活动,我不确定如何添加一个。我认为我需要一个意图过滤器来使来自我的应用程序外部的意图调用工作。有没有人以前解决过这个问题或知道如何解决它?
另一个清单看起来像这样,但有一个通用的包名称,从外部 (adb) 也是不可见的。但是这个有一个意图过滤器。但我很确定,我无法有意访问它。
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="android.notch_support" android:value="true" />
</activity>
<meta-data android:name="unity.splash-mode" android:value="0" />
<meta-data android:name="unity.splash-enable" android:value="True" />
<meta-data android:name="notch.config" android:value="portrait|landscape" />
<meta-data android:name="unity.build-id" android:value="f5abdf68-b589-4d67-acb2-5c55e15b3fd3" />
</application>
<uses-feature android:glEsVersion="0x00030000" />
<uses-feature android:name="android.hardware.vulkan.version" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>
解决方案
如果这是 temp->staging area 文件夹中的 android 清单并且您对其进行了修改.. 它不会工作。因为每次构建时,统一都会创建一个新的 android 清单。而是在 Plugins->Android 文件夹中创建一个 android manifest 文件并创建 intent-filter,unity 将自动合并 2 个 android manifest。
并确保您对带有 VIEW 数据的第二个意图过滤器进行了修改。添加类似 android:scheme(im on mobile and just google it and you will find it) 和你的意图等。
推荐阅读
- react-native - 当我在 React Native 中排队时,我的 TextInput 的字在跳舞
- android - 显示 Dialog Fragment 时使状态栏正常显示
- ruby - 使用索引对字符串数组进行冒泡排序
- kubernetes - Kubernetes 负载均衡器网络安全组
- node.js - 更新所有全局 npm 包,除了链接的包
- java - 如何监控容器的 JVM 并在 AWS 上对单个容器的使用情况发出警报?
- linux - 将 CSV 数据转换为具有层次结构的 JSON 格式
- sql - SQL Server 同一查询中的多个计数 - CosmosDB
- python - 无法将请求发布到动态呈现的页面 - 错误代码 500
- python - 对于 pandas DataFrame 中一行中的每个列表,对列表中所有可能的值对执行操作