Androidの古いバージョンで正常に動作するランチャーアプリケーションがあります。 Android 5.1を実行しているデバイスがあり、問題が発生しています。ホーム画面にナビゲートすると、Androidアプリケーションが再起動しない
アプリケーション内から戻るボタンを押すと、ユーザーは設定ページに移動できます。ホームキーを押すとアプリケーションが再起動されます。他のデバイスで戻るボタンを押すと、アプリケーションが再起動されます。
新しいデバイスでは、戻るボタンを押すと、Androidのホームページに移動できます。アプリケーションを起動しません。
我々はそうのようなバックボタンをオーバーライドしている:私は、いくつかの研究および他のスレッド毎の
public void exitToSettings() {
GUIAndroidTouchBaseActivity.this.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
shutdownOperations();
finish();
}
を:ダイアログフラグメントで
@override
public void onBackPressed() {
// Display the password prompt if required
if (PreferencesManager.isPasswordPresent()) {
LeaveApplicationPasswordDialogFragment dialog = LeaveApplicationPasswordDialogFragment.getInstance();
dialog.show(getSupportFragmentManager(), "password");
}
else {
// Prompt whether we are about to leave the app
LeaveApplicationDialogFragment dialog = null;
MyApplication application = (MyApplication)
getApplication();
if (application.isDefaultLauncher()) {
dialog = LeaveApplicationDialogFragment.getInstance("Are you sure you want to leave ** to access the device's settings?");
}
else {
dialog = LeaveApplicationDialogFragment.getInstance("Are you sure you want to leave ***");
}
dialog.show(getFragmentManager(), "leaving");
}
}
、我々は確認を受け入れ、そのようにそれを処理します次のようなexitメソッドを使用しました。
public void exitToSettings() {
Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
GUIAndroidTouchBaseActivity.this.startActivity(intent);
shutdownOperations();
finish();
}
ダイスはありません。同じ振る舞い。
私には何が欠けていますか?私たちのランチャーをオーバーライドする何かがOS 5.1にありますか?再び、ホームボタンを押すと、期待どおりにアプリが起動します。戻るボタンを押して設定ページからホームページに移動しても移動しません。
私たちは他のデバイスやOSで動作します。 4.1と6.1では何の問題もありませんでした。
我々はまた、そのようなバックボタン上書きされます。
@Override
public boolean onKeyDown(int keyCode, KeyEvent KEvent) {
int deviceid = KEvent.getDeviceId();
//Making sure not processing same key again
if (KEvent.getRepeatCount() != 0) {
return true;
}
if (!SettingsOpened) {
int keyaction = KEvent.getAction();
// "Esc" key can not be stooped id diveceid is non zero because it can be back key of android
if (KEvent.getKeyCode() == KeyEvent.KEYCODE_BACK && deviceid != 0) {
return super.onKeyDown(keyCode, KEvent);
}
if (keyaction == KeyEvent.ACTION_DOWN) {
String key = KeyEvent.keyCodeToString(keyCode); //wont work in version 11 or less
if (keyCode != KeyEvent.KEYCODE_ENVELOPE) {
Matcher matcher = KEYCODE_PATTERN.matcher(key);
if (matcher.matches() || ExternalKeyboard.keyMatches(KEvent)) {
int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState());
char character = (char) keyunicode;
//toast.makeText(this, "onKeyDown" + _lastChar + repeatcount, toast.LENGTH_SHORT).show();
_lastChar = character;
_actionDown = true;
ExternalKeyboard.KeyboardAddChar(character);
}
}
}
return true;
}
else {
return super.onKeyDown(keyCode, KEvent);
}
}
感謝を!
KeyEvent.KEYCODE_BACKに対してもonKeyDownをオーバーライドしてみてください。 –
私たちはすでに: – Ken
私は、マニフェストにアンドロイド:clearTaskOnLaunch = "false"を追加すると、家に帰る際にアプリが起動することが分かりました。残念ながら、それは時間の変化のために黒い画面に「ハングする」ように見え、時には無期限に表示されます。 – Ken