-1

アラームをトリガーする Android アプリケーションを作成したいと考えています。btnStart というボタンがあります。ユーザーがボタンをクリックすると、3 秒以内に AlarmReceiverActivity.java に移動し、サウンドの再生が開始されます。

btnStart onclick メソッドは次のようになります

btnStart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            int i = 3;
            Intent intent = new Intent (MapPage.this, AlarmReceiverActivity.class);
                PendingIntent pending =
                        PendingIntent.getActivity(MapPage.this, 2, intent, 
                                            PendingIntent.FLAG_CANCEL_CURRENT);

            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(i * 1000), pending);

            if (toast != null){
                toast.cancel();
            }

            toast = Toast.makeText(getApplicationContext(), "Alarm for activity is set in : "+ i +" second", toast.LENGTH_SHORT);
            toast.show();                       
            }
        });

および AlarmReceiverActivity.java は次のようになります

public class AlarmReceiverActivity extends Activity{
private MediaPlayer mMediaPlayer;
private PowerManager.WakeLock mWakeLock;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.alarm);

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Wake Log");
    mWakeLock.acquire();
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_FULLSCREEN |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    Button stopAlarm = (Button) findViewById(R.id.stopAlarm);
    stopAlarm.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mMediaPlayer.stop();
            finish();
        }
    });
    playSound (this, getAlarmUri());
}

この短い質問を短くするために、上記で述べていない方法がいくつかあります。ボタンをクリックすると、エラーが発生しました。それは言う

java.lang.RunTimeException: Unable to start activity ComponentInfo{com.example.splashscreen/com.example.splashscreen.AlarmReceiverActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content

この問題を解決する方法について何か考えはありますか? 前もって感謝します

4

2 に答える 2

2

これを入れてください:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

この前に:

setContentView(R.layout.alarm);

ドキュメントからrequestWindowFeature(強調を追加):

拡張画面機能を有効にします。これは setContentView() の前に呼び出す必要があります。setContentView() の前であれば、何度でも呼び出すことができます。呼び出されない場合、拡張機能は使用できません。一度要求された機能をオフにすることはできません。FEATURE_CUSTOM_TITLE で他のタイトル機能を使用することはできません。

于 2013-11-04T06:21:18.287 に答える
2

このように順番を変えて..

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_FULLSCREEN |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm);
于 2013-11-04T06:22:07.303 に答える