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" />