1

我在我的统一项目中实现了两个插件。第一个插件是一个包含主要活动的动态壁纸。第二个插件是原生共享。我所做的是我从包含主要活动的第一个插件中获得了上下文参考:

    public static Context getContext() 
{
     instance.startActivity(myIntent);
     return instance;
}

在统一脚本中

Main_Context = appClass.CallStatic<AndroidJavaObject>("getContext");

然后我使用Main_Context引用在第二个插件中调用共享函数

new NativeShare().AddFile(Application.persistentDataPath + "/img Shot.png").SetSubject(" Image Share").SetText("").Share(Main_Context);

问题是我不断收到此错误:

Calling startActivity() from outside of an Activity  context requires the  
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

所以我似乎有些需要在 startactivity() 调用之前在第二个插件中添加这一行

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

有没有更简单的方法来解决这个错误而不编辑已经编译的插件?

4

1 回答 1

1

好吧,事实证明动态壁纸项目及其插件扩展了标准UnityPlayerActivity类,这意味着它currentActivity已被覆盖并且com.unity3d.player.UnityPlayer不再存在。所以不要currentActivity像这样:

    private static AndroidJavaObject Context
{
    get
    {
        if( m_context == null )
        {
            using( AndroidJavaObject unityClass = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) )
            {
                m_context = unityClass.GetStatic<AndroidJavaObject>( "currentActivity" );
            }
        }

        return m_context;
    }
}

UnityPlayerActivity我们可以使用扩展和覆盖标准类的插件:

    private static AndroidJavaObject Context
{
    get
    {
        if( m_context == null )
        {
            using( AndroidJavaObject unityClass = new AndroidJavaClass( "ulw.ulw.ulw.UnityPlayerActivity" ) )
            {
                m_context = unityClass.GetStatic<AndroidJavaObject>( "activity" );
            }
        }

        return m_context;
    }

现在所有添加的插件都可以与动态壁纸项目及其插件共存。

于 2019-11-30T18:23:44.963 回答