2015-10-16 66 views
1

我有一個困難時期試圖從我的插件與統一的主要表現:(添加使用清單合併意圖過濾器在Unity3d

合併清單的統一清單

<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name"> 
<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" /> 
</activity> 

我的插件清單

<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="XXX"/> 
      </action> 
    </intent-filter> 
</activity> 

我的目標是這個額外的意圖過濾器添加到交流,但它具有

悲慘的失敗了
Trying to merge incompatible /manifest/application/activity[@name=com.unity3d.player.UnityPlayerActivity 

添加工具:node =「merge」或tools:node =「replace」也沒有幫助。

關於如何添加意圖的任何線索? 謝謝 D

回答

0

您可以列出一個活動下的所有意向。所以,你的表現應該是這樣的

<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name"> 
    <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" /> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="XXX"/> 
     </action> 
    </intent-filter> 
</activity> 
+0

是的,這是我想要最終得到的結果,但是我不能(手動)創建如清單:它需要是兩個清單合併的輸出(參見https://developer.android.com/tools/building/manifest-merge.html)。 – Delta

+0

如果您想合併思想代碼,您應該將其編輯爲'XDocument',這是一些插件(如Unibill)如何更新清單。 但我敢肯定,我主要是有時候改變了。您可以嘗試下一步: 1.構建無插件遊戲 2.在文件夾'/ Temp/StagingArea/AndroidManifest.xml'中生成統一生成的清單 3.添加您的插件權限,然後將其放到'Assets/Plugins/Android/AndroidManifest.xml' 這有點骯髒的解決方案,但它爲我工作。 – B4lto

+0

瞭解。我希望避免必須通過代碼進行合併,而是使用內置的合併機制。但是如果沒有其他方法,我會手動解析清單。謝謝。 – Delta

0

您可以通過避免代碼合成但你必須爲你的意圖過濾器,它只是調用com.unity3d.player.UnityPlayerActivity

我創建一個單獨的活動只是COMMITED一個意圖幫手utiliy我這一次創建: https://github.com/simon-heinen/aEx_unity/blob/master/aEx_IntentHelper/Plugins/Android/sources/IntentFilterActivity.java

public class IntentFilterActivity extends Activity { 

private static final String LOG_TAG = IntentFilterActivity.class 
     .getSimpleName(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    final String gameObjectName = "IntentFilter"; 
    final String methodName = "OnIntentFilter"; 
    final String messageToSend = getIntent().getData().toString(); 

    /* 
    * Get the main activity launch it and wait until the unity player is 
    * ready to receive the URL via UnityPlayer.UnitySendMessage() 
    */ 
    String myOwnPackageName = getApplicationContext().getPackageName(); 
    Intent mainLauncherIntent = getPackageManager() 
      .getLaunchIntentForPackage(myOwnPackageName); 
    startActivity(mainLauncherIntent); 

    new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected Void doInBackground(Void... params) { 
      Log.d(LOG_TAG, "Will now wait until unity player is ready.."); 
      while (UnityPlayer.currentActivity == null) { 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      Log.d(LOG_TAG, "Unity is ready, sending event: " 
        + gameObjectName + "." + methodName + "(" 
        + messageToSend + ")"); 
      UnityPlayer.UnitySendMessage(gameObjectName, methodName, 
        messageToSend); 
     } 
    }.execute(); 

} 
} 

,也許你只是使用完整的https://github.com/simon-heinen/aEx_unity/tree/master/aEx_IntentHelper

我認爲這種方式比將它整合到Unity活動本身更好,因爲您可以在所有項目中重複使用它,而無需修改它;)