Спасибо Гейбу Сечану, который поставил меня на правильный путь.
Во-первых, я никогда не мог напрямую запустить приложение на устройстве и подключиться к нему через отладчик.Скорее мне пришлось запустить приложение на устройстве через Android Studio, а затем щелкнуть ссылку на электронном письме, которое затем подключилось к отладчику.
Ссылка в электронном письме выглядела примерно так (она имеет встроенныйв перенаправлении на наши серверы):
https://ourcompany.net/redirect?url=myapp%3A%2F%2FDoStuff/123456
Это могло произойти из-за способа настройки Intent.Пожалуйста, не судите, это было здесь, где я был, и я знаю, что это не рекомендуемый способ сделать Intents, но из-за существующей клиентской базы я не могу переформулировать, чтобы лучше подходить, в AndroidManifest.xml:
<activity
android:name="com.mycompany.StartActivity"
android:configChanges="orientation|keyboardHidden|screenSize|keyboard|navigation"
android:label="StartActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden" >
<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="myapp" />
</intent-filter>
</activity>
Как вы можете видеть, он предназначен для работы как одиночный, поэтому, когда Intent активирован, вместо вызова onCreate () с приложением, запущенным из отладчика, он вызывает onNewIntent ().Мне нужно было добавить код и к этому перегруженному методу:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
processIntentLaunch(); // Code to test or run when Intent is triggered...
}
Код processIntentLaunch
:
private void processIntentLaunch() {
// test if this is from an email
try {
Intent intent = getIntent();
if (intent.getAction() != null) {
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
// SAMPLE: myapp://DoStuff/123456
Uri uri = intent.getData();
String host = uri.getHost();
String uriStr = uri.toString();
// An anonymous dispatch
if (host.equalsIgnoreCase("DoStuff")) {
String token = uriStr.substring(uriStr.indexOf("DoStuff") + "DoStuff".length()+1, uriStr.length());
// Now do stuff with the data. Note query string URI probably better, but again bit by previous design
}
}
}
}
catch (Exception ex) {
// Handle error
}
}
Вероятно, это было к лучшему, так как кроме кода вOnCreate (если приложение еще не запущено), если приложение работает, оно все равно будет работать (и я могу отладить код).
Надеюсь, что когда-нибудь это кому-нибудь поможет.