Как использовать неосновную деятельность для захвата пользовательского URL в игре единства?
Когда кто-то нажимает ссылку на веб-странице формы "com.foo.bar://testtest", я хочу, чтобы она открыла мою игру единства и для меня, чтобы получить тестовые данные.
Я опытный программист, но когда дело доходит до андроида, я как бы искал Google, а не понимал что-то. Это важно.:)
Я могу реагировать на ссылки на андроид, используя фильтры намерения. Однако все ресурсы, которые я нашел, предположили, что вы можете расширить свою основную деятельность, чтобы зафиксировать новое намерение. Это можно сделать с единством, но по разным причинам я предпочел бы этого не делать. Я попытался создать новое действие, экспортировав его в банку и добавив это в свой манифест в теге приложения:
<activity android:name="com.foo.ProtocolCatcher"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="com.foo.bar" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
Нажатие на ссылку успешно запускает мою игру, но на черный экран.
Изменить: я также пробовал этот формат без изменений:
<activity android:name="com.foo.ProtocolCatcher"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="com.foo.bar" />
</intent-filter>
</activity>
Каковы магические заклинания, чтобы сделать загрузку всей игры вместе с моей пользовательской деятельностью и позволить моей пользовательской активности читать входящий URL-адрес, не касаясь основного действия?
Ответы
Ответ 1
Я полагаю, что вы не указали часть последовательности загрузки; требуемые шаги:
- Определите ProtocolCatcher
Activity
с соответствующей схемой (ОК)
- Определите MainActivty, который представляет вашу главную игру Unity3D
Activity
(OK)
- Запустите MainActivity при запуске ProtocolCatcher
Activity
(MISSING)
Реализация третьего шага очень проста; просто отредактируйте метод ProtocolCatcher Activity
onCreate()
:
//ProtocolCatcher
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
Intent gameIntent = new Intent(this, MainActivity.class);
/*
//Pass the extra data to the game if needed
Intent sourceIntent = getIntent();
Uri data = sourceIntent.getData();
gameIntent.putExtra("uriData", data != null ? data.toString(): null);
*/
startActivity(gameIntent); //start the real game
finish(); //close the ProtocolCatcher activity
}
Учитывая тот факт, что вы "впрыскиваете" ProtocolCatcher Activity
вручную, если у вас есть проблема со ссылкой MainActivity из ProtocolCatcher onCreate()
, вы можете искать относительный класс с использованием отражения.