2015-10-12 4 views
0

В моем приложении Android я хочу изменить метод ввода. Поэтому я начинаю новый Activity, который показывает настройки языка на устройстве. Тогда пользователь может его изменить. Однако тогда я хочу знать, что если пользователь изменил его. Поэтому я написал для этого функцию. Мой код до сих пор есть ...Как узнать, когда действие завершено в Android?

Intent enableIME = new Intent(android.provider.Settings.ACTION_INPUT_METHOD_SETTINGS); 
        startActivityForResult(enableIME,0); 


        if(isInputMethodEnabled()){ 
         activateshadow.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_pressed)); 
         activateshadow.setText("Deactivate Shadow"); 
         prefs.edit().putBoolean("Activate", false).commit(); 
        }else{ 
         Toast.makeText(MainActivity.this,"You haven't change the input method to simpleIME.In order to activate you must change it.",Toast.LENGTH_SHORT).show(); 
        } 

мой является inputMethodEnabled функция ....

public boolean isInputMethodEnabled() { 
    boolean isIME ; 
    String id = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); 
    String [] name = id.split("/."); 
    // Toast.makeText(MainActivity.this,"s:"+name[1]+":s",Toast.LENGTH_SHORT).show(); 
    if(name[1].contains("SimpleIME")){ 
     isIME = true ; 
    }else{ 
     isIME = false; 
    } 
    // Toast.makeText(MainActivity.this,"Returning..."+isIME,Toast.LENGTH_SHORT).show(); 
    return isIME; 
} 

if(isInputMethodEnabled()) всегда терпит неудачу, потому что, когда new intent(settings) открывается, и это займет некоторое время, чтобы изменить метод ввода simpleIME. Как решить эту проблему?

+0

Ваш вопрос название является простым, тело - нет. Пожалуйста, начните второй вопрос, чтобы избежать путаницы здесь. – John

ответ

0

Вы поймаете, когда запущен Activity возвращается в onActivityResult. Параметр requestCode, который вы поставили на startActivityForResult, будет параметром, как и результат Activity. Activity также может устанавливать другие данные, о которых вы не спрашивали.

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 555) {//555 is the intent ID you gave in startActivityForResult(enableIME,555); 
     if (resultCode == /*Result1*/) 
      //Do something 
     else { 
      //Do something else 
     } 
    } 
} 

Вам нужен уникальный идентификатор при вызове startActivityForResult(enableIME,0);

startActivityForResult(enableIME, 555); 

еще лучше заменить 555 с именем переменной.

+0

Спасибо. но что такое resultCode здесь, я ничего не возвращаю из своего второго действия. На самом деле я просто включаю свой IME, а затем возвращаюсь к основному действию своего приложения, нажимая кнопку «Назад». –

+0

Не беспокойтесь об этом. Вы можете обнаружить, когда 'Активность' закончилась в' onActivityResult' – John

+0

ok. так как я должен использовать этот метод в своем коде. каковы значения аргументов, которые я должен пройти.? для requestCode я не имеет значения. Я получил его. Что относительно других 2 аргументов? –

0

если вы посмотрите на андроид жизненный цикл, когда активность закончен весь андроид call onDestroy() способ. , так что вы можете вызвать и переопределить этот метод. просто нужно написать:

@override 
protected void onDestroy(){ 
// code 
super.onDestroy(); 
} 

и может управлять и переопределить все части жизненного цикла в андроиде например: onResume, чтобы получить текущую деятельность

я надеюсь, что эта помощь у

+0

'onDestroy' не всегда вызывается, например, если« Активность »выкинута из списка повторов. – John

Смежные вопросы