По какой-то причине, когда я (пытаюсь) запускать свое приложение, телефон решает запустить системные настройки вместо моего "основного действия". И да, я имею в виду "настройки системы Android", а не что-то из моего приложения.
Это происходит только на моем телефоне, и я полагаю, вероятно, это связано с тем, что мое приложение только что открыло системные настройки, когда я решил перезапустить новую версию из Eclipse.
Можно запустить приложение из Eclipse, но когда я вернусь обратно из приложения, он вернется к системным настройкам, а не к главному экрану, как если бы активность настроек была запущена сначала, а затем моя активность. Если я затем запустил приложение с телефона, все, что я получаю, это системные настройки еще раз.
Приложение прослушивает VIEW-действие для определенной подстроки URL, и когда я запускаю приложение с использованием соответствующего URL-адреса, я получаю тот же результат, что и при запуске его из Eclipse, приложение запускается, но когда я возвращаюсь, я возвращаюсь к настройкам.
Я пробовал поиск по этой проблеме, и все, что я мог найти, это что-то вроде Android сохранения состояния, когда приложение убивается, но без какой-либо информации о том, как reset это состояние. Я попытался удалить приложение, убить системные настройки, перезагрузить телефон, переустановить, очистить данные приложения.. не повезло..
Для чего это стоит, здесь определение моей основной деятельности из манифеста,
<activity android:name=".HomeActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:clearTaskOnLaunch="true" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
<data android:pathPrefix="/isak-web-mobile/smart/" android:scheme="http" android:host="*"></data>
</intent-filter>
</activity>
И вот строка logcat, с которой я пытаюсь запустить приложение, ничего о каких-либо настройках в любом месте.
I/ActivityManager( 1301): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=se.opencare.isak/.HomeActivity }
Когда я запускаю из Eclipse, я также получаю эту строку (как и следовало ожидать),
I/ActivityManager( 1301): Start proc se.opencare.isak for activity se.opencare.isak/.HomeActivity: pid=23068 uid=10163 gids={3003, 1007, 1015}
Если это имеет значение, телефон HTC Desire Z работает под управлением 2.2.1.
В настоящее время это моя HomeActivity,
public class HomeActivity extends Activity {
public static final String TAG = "HomeActivity";
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult(" + requestCode + ", " + resultCode + ", " + data + ")");
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate(" + savedInstanceState + ")");
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
Log.d(TAG, "onDestroy()");
super.onDestroy();
}
@Override
protected void onPause() {
Log.d(TAG, "onPause()");
super.onPause();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
Log.d(TAG, "onPostCreate(" + savedInstanceState + ")");
super.onPostCreate(savedInstanceState);
}
@Override
protected void onPostResume() {
Log.d(TAG, "onPostResume()");
super.onPostResume();
}
@Override
protected void onRestart() {
Log.d(TAG, "onRestart()");
super.onRestart();
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Log.d(TAG, "onRestoreInstanceState(" + savedInstanceState + ")");
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onResume() {
Log.d(TAG, "onResume()");
super.onResume();
}
@Override
protected void onStart() {
Log.d(TAG, "onStart()");
super.onStart();
}
@Override
protected void onStop() {
Log.d(TAG, "onStop()");
super.onStop();
}
@Override
protected void onUserLeaveHint() {
Log.d(TAG, "onUserLeaveHint()");
super.onUserLeaveHint();
}
}
Ничто (из приведенного выше) не записывается в журнал.
После прочтения ответа Бланделла я попытался изменить параметры launchMode/clearTaskOnLaunch со следующими результатами:
- Ситуация A - я удаляю launchMode и clearTaskOnLaunch: та же проблема, что и раньше
- Ситуация B - я удаляю clearTaskOnLaunch и держит launchMode = "singleInstance": другая проблема
- Открыть приложение - My HomeActivity показывает
- Нажмите на кнопку, чтобы открыть другое действие в моем приложении - оно открывается, как оно должно
- Нажмите кнопку системы - она вернет меня к системным настройкам
- Нажмите снова кнопку системы - я вернусь в свою HomeActivity
- Еще один щелчок по кнопке "Назад" возвращает меня на главный экран Android.
- Ситуация C - я удаляю только launchMode и сохраняет clearTaskOnLaunch: та же проблема, что и раньше.
- Sitatuion D - я удаляю clearTaskOnLaunch и устанавливаю launchMode = "singleInstance": то же, что и ситуация B