Android Api 级别 30 中的意图 getExtra()/putExtra 不工作
Intents getExtra()/putExtra in Android Api level 30 not working
为什么此代码在 Android API 级别 30(附加项为空)的设备上无法正常工作?
然而,对于 API 级别 29,额外内容不为空,我们得到了我们发送的内容。
我们发送的额外内容只是一串。
我们正在从 Unity 应用程序 (C#) 启动 Intent,但不确定这是否相关。
Java Android Studio 中的代码
public void onResume() {
super.onResume();
Bundle extras = getIntent().getExtras();
if (extras != null) {
//not null in 29, null in 30
}
}
Unity(C#) 代码
AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject packageManager = ca.Call<AndroidJavaObject>("getPackageManager");
AndroidJavaObject launchIntent = null;
var bundle = "com.xxxxxx.xxxxx";
launchIntent=packageManager.Call<AndroidJavaObject("getLaunchIntentForPackage",bundle);
launchIntent.Call<AndroidJavaObject>("putExtra", "argument", "StringArgument");
ca.Call("startActivity", launchIntent);
抱歉回复晚了。我想我会 post 这个,因为它仍然可以帮助你或帮助其他人。
我也尝试从 Unity 提供数据,但遇到了同样的问题。我的解决方案不是使用意图,而是在我的 Android 应用程序中调用一个方法。这是我的做法。
在Unity边
string message = "Hello from Unity!";
AndroidJavaClass bridgeClass = new AndroidJavaClass("com.example.BridgeActivity");
bridgeClass.CallStatic("unityDataServed", message);
在Android一侧
创建一个静态方法(在本例中,该方法称为 unityDataServed)接收一个字符串作为 bridgeClass 引用的 class 中的参数。
我设法找到了解决此问题的方法。 Android 的较新版本似乎有一个单独的权限层,用于根据此 link.
进行更安全的意图操作
基本上我将这一行添加到两个应用程序的 AndroidManifest.xml 文件(Android Studio 应用程序和 Unity 应用程序):
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />
为什么此代码在 Android API 级别 30(附加项为空)的设备上无法正常工作? 然而,对于 API 级别 29,额外内容不为空,我们得到了我们发送的内容。
我们发送的额外内容只是一串。
我们正在从 Unity 应用程序 (C#) 启动 Intent,但不确定这是否相关。
Java Android Studio 中的代码
public void onResume() {
super.onResume();
Bundle extras = getIntent().getExtras();
if (extras != null) {
//not null in 29, null in 30
}
}
Unity(C#) 代码
AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject packageManager = ca.Call<AndroidJavaObject>("getPackageManager");
AndroidJavaObject launchIntent = null;
var bundle = "com.xxxxxx.xxxxx";
launchIntent=packageManager.Call<AndroidJavaObject("getLaunchIntentForPackage",bundle);
launchIntent.Call<AndroidJavaObject>("putExtra", "argument", "StringArgument");
ca.Call("startActivity", launchIntent);
抱歉回复晚了。我想我会 post 这个,因为它仍然可以帮助你或帮助其他人。
我也尝试从 Unity 提供数据,但遇到了同样的问题。我的解决方案不是使用意图,而是在我的 Android 应用程序中调用一个方法。这是我的做法。
在Unity边
string message = "Hello from Unity!";
AndroidJavaClass bridgeClass = new AndroidJavaClass("com.example.BridgeActivity");
bridgeClass.CallStatic("unityDataServed", message);
在Android一侧
创建一个静态方法(在本例中,该方法称为 unityDataServed)接收一个字符串作为 bridgeClass 引用的 class 中的参数。
我设法找到了解决此问题的方法。 Android 的较新版本似乎有一个单独的权限层,用于根据此 link.
进行更安全的意图操作基本上我将这一行添加到两个应用程序的 AndroidManifest.xml 文件(Android Studio 应用程序和 Unity 应用程序):
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />