その下のボタンがクリックされたときに画像を変更しようとしています。電話を通常モードからサイレントモードに切り替えて、電話の状態に応じて画像を変更しようとしています。
私は本を読んでいますが、何が悪いのかわかりません(問題を引き起こす原因となるコピーペーストではありません)。良いニュースですが。電話をサイレント モードに切り替えても画像は変わりませんが、サイレント モードが既にオンの状態でアプリを再度開くと、画像はサイレント モードのときのはずの状態に変わります。また、通常モードに戻すと機能しますが、アプリを閉じて再度開き、システムが電話の状態を読み取るまで、画像は変更されません。何が悪いのかわかりませんが、私のコードは次のとおりです。
private AudioManager mAudioManager;
private boolean mPhoneIsSilent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linear);
mAudioManager= (AudioManager)getSystemService (AUDIO_SERVICE);
checkIfPhoneIsSilent();
setButtonClickListener();
toggleUi();
}
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;
}
}
}
);
}
private void toggleUi() {
ImageView imageView=(ImageView)findViewById(R.id.phone_icon);
Drawable newPhoneImage;
if(mPhoneIsSilent)
newPhoneImage=getResources().getDrawable(R.drawable.mute);
else
newPhoneImage=getResources().getDrawable(R.drawable.unmute);
imageView.setImageDrawable(newPhoneImage);
setContentView(R.layout.linear);
}
private void checkIfPhoneIsSilent()
{
int ringerMode=mAudioManager.getRingerMode();
if(ringerMode==AudioManager.RINGER_MODE_SILENT)
mPhoneIsSilent=true;
else mPhoneIsSilent=false;
}
それに付随する XML は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/phone_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/unmute" />
<Button
android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Toggle Silent Mode"/>
</LinearLayout>