2017-06-29 10 views
0

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); 
    } 

} 

感謝を!

+0

KeyEvent.KEYCODE_BACKに対してもonKeyDownをオーバーライドしてみてください。 –

+0

私たちはすでに: – Ken

+0

私は、マニフェストにアンドロイド:clearTaskOnLaunch = "false"を追加すると、家に帰る際にアプリが起動することが分かりました。残念ながら、それは時間の変化のために黒い画面に「ハングする」ように見え、時には無期限に表示されます。 – Ken

答えて

0

アンドロイドの追加:stateNotNeeded = "true" を アンドロイド:clearTaskOnLaunchは= "false" を私のマニフェストに はそれの世話をしました。

関連する問題