私はドン・フェルカーの 『ダミーのためのAndroidアプリケーション開発』の本を扱っています。具体的には、サイレントモードアプリを使用しています。
手順を1つずつ実行するのは簡単なはずですが、結局のところ、アプリをクラッシュさせずにメインアクティビティを開始することすらできません。私は自分のコードを何十回も調べたに違いありませんが、それでも何が悪いのかを理解して、LogCatが狂ったようにエラーを発生させずにコードを機能させることはできません。
デバッグデバイスは、Android4.0.3を搭載したSamsungGalaxySIIです。
これがMainAcitivityクラスです
public class MainActivity extends Activity {
Button m_toggleButton = (Button)findViewById(R.id.toggleButton);
AudioManager m_audio = (AudioManager)getSystemService(AUDIO_SERVICE);
boolean m_isPhoneSilent;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkMode();
toggleImage();
generateClick();
}
@Override
protected void onResume()
{
super.onResume();
checkMode();
toggleImage();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private void checkMode()
{
m_audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
switch(m_audio.getRingerMode())
{
case AudioManager.RINGER_MODE_NORMAL:
m_isPhoneSilent = false;
break;
case AudioManager.RINGER_MODE_SILENT:
m_isPhoneSilent = true;
break;
}
}
private void generateClick()
{
m_toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if (m_isPhoneSilent == true)
{
m_audio.setRingerMode
(AudioManager.RINGER_MODE_NORMAL);
m_isPhoneSilent = false;
}
else
{
m_audio.setRingerMode
(AudioManager.RINGER_MODE_SILENT);
m_isPhoneSilent = true;
}
toggleImage();
}
});
}
private void toggleImage()
{
ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
Drawable newAsset;
if (m_isPhoneSilent == true)
{
newAsset = getResources().getDrawable(R.drawable.phone_silent);
}
else
{
newAsset = getResources().getDrawable(R.drawable.phone_on);
}
imageView.setImageDrawable(newAsset);
}
デバッグを試みましたが、問題は見つかりませんでした。助けてください。