我正在尝试 Android应用程序开发傻瓜的示例,这是一个简单的应用程序,可以切换手机的铃声模式。代码如下。
public class SilentModeToggleActivity extends Activity {
private AudioManager mAudioManager;
private boolean mPhoneIsSilent;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
checkIfPhoneIsSilent();
setButtonClickListener();
}
@Override public void onResume() {
super.onResume();
checkIfPhoneIsSilent();
toggleUi();
}
private void checkIfPhoneIsSilent() {
int ringerMode = mAudioManager.getRingerMode();
if (ringerMode == AudioManager.RINGER_MODE_SILENT) {
mPhoneIsSilent = true;
} else {
mPhoneIsSilent = false;
}
}
private void setButtonClickListener() {
Button toggleButton = (Button) findViewById(R.id.toggleButton);
toggleButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (mPhoneIsSilent) {
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
mPhoneIsSilent = false;
} else {
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
mPhoneIsSilent = true;
}
toggleUi();
}
});
}
private void toggleUi() {
ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
Drawable newPhoneImage;
if (mPhoneIsSilent) {
newPhoneImage = getResources().getDrawable(R.drawable.phone_silent);
} else {
newPhoneImage = getResources().getDrawable(R.drawable.phone_on);
}
imageView.setImageDrawable(newPhoneImage);
}
}
我的问题是因为我只覆盖onCreate()
(默认情况下显示“正常”模式图像)和onResume()
,如果我将手机模式更改为“静音”,则预计图像会变为“静音”在应用程序外部静音(在onResume()
我检查当前状态并更新用户界面),但为什么即使我 KILL 进程然后将手机模式更改为无声?
我希望该应用重新加载并显示默认图片,这是正常的。不是正确而又令人困惑的无声图像。
答案 0 :(得分:5)
onResume()
。这包括:
当其他人有前景后(例如,设置)返回到屏幕时,
在此过程中第一次创建它时(包括因为您从DDMS中删除了旧进程而需要的任何新进程)
因此,在任何一种情况下,您的代码都会检查振铃模式的状态,并且在任何一种情况下都会使用正确的图像。
答案 1 :(得分:3)
onResume不限于在活动暂停后被调用,只要活动进入活动堆栈的顶部,它就会被称为。这包括它在创建后第一次显示。
developer doucmentation非常详细地介绍了活动生命周期的工作原理,包括描述实际调用每个生命周期回调的流程图和表格。
答案 2 :(得分:0)
我认为您会发现Android开发人员文档的最新更新将澄清您的答案。 onResume()将在您的活动第一次启动时调用,将活动带到前台,或将手机带出锁定屏幕。
答案 3 :(得分:0)
onResume IS在启动时被调用。请参阅活动生命周期文档here。