如何知道android中的活动何时完成?

如何知道android中的活动何时完成?,android,android-intent,Android,Android Intent,在我的android应用程序中,我想更改输入法。因此,我启动了一个新的活动,显示设备中的语言设置。然后用户可以更改它。但是,我想知道用户是否更改了它。所以我也为此写了一个函数。到目前为止我的代码是 Intent enableIME = new Intent(android.provider.Settings.ACTION_INPUT_METHOD_SETTINGS); startActivityForResult(enableIME,0);

在我的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();
                    }
我的is 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())
总是失败,因为当打开
新意图(设置)
时,需要一些时间才能将输入方法更改为
simpleme
。如何解决此问题?

当启动的
活动
onActivityResult
中返回时,您将捕获该问题。您提供给
startActivityForResult
requestCode
活动的结果将是一个参数。
活动
还可以设置您未询问的其他数据

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)时需要唯一的id


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

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

@override
protected void onDestroy(){
// code
super.onDestroy();
}
你可以在android中管理和覆盖生命周期的所有部分 e、 g:onResume以获取当前活动


我希望这对你有所帮助

你的问题标题直截了当,正文却不是。请在这里开始第二个问题以避免混淆。谢谢。但是这里的结果代码是什么,我不会从第二个活动中返回任何内容。实际上,我只是启用我的输入法,然后按后退按钮返回到我的应用程序主活动。不要担心。您可以在
onActivityResult
ok中检测
活动何时完成。那么我应该如何在代码中使用这个方法呢。我应该传递的参数值是什么。?对于requestCode,我不在乎。我明白了。其他两个参数呢?谢谢John。我会尝试一下这一个
onDestroy
并不总是被调用,例如,如果
活动被从最近事件列表中踢出。
@override
protected void onDestroy(){
// code
super.onDestroy();
}