如何知道Activity何时在android中完成?

时间:2015-10-12 17:22:49

标签: android android-intent

在我的Android应用程序中,我想更改输入法。所以我开始一个新的Activity,显示设备中的语言设置。然后用户可以更改它。然而,我想知道如果用户已经改变它。所以我也为此写了一个函数。到目前为止我的代码是......

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。如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

Activity中的已启动onActivityResult返回时,您会抓住。您提供给requestCode的{​​{1}}将是一个参数,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 } } }

时,您需要一个唯一的ID
startActivityForResult(enableIME,0);

最好还是用命名变量替换555。

答案 1 :(得分:0)

如果你看看android生命周期,当活动完成整个android调用onDestroy()方法时。 所以你可以调用并覆盖这个方法。 只需要写:

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

你可以管理和覆盖android中所有生命周期的部分 例如:onResume获取当前活动

我希望这有帮助你