2013-11-04 24 views
-1

我想創建一個android應用程序來觸發警報。我有一個名爲btnStart的按鈕。當用戶點擊按鈕時,在3秒內,它應該去AlarmReceiverActivity.java並開始播放聲音。在添加內容之前必須調用requestFeature()

的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 

任何想法如何解決這個問題?謝謝你在前進

回答

2

Chnage這樣的順序..

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); 
+0

我仍然得到相同的錯誤。 。 – MAJ

+0

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) ;刪除此或添加setContentView(R.layout.alarm)之前; –

+0

代碼編輯檢查,並做這樣的..或刪除setFlags()方法.. –

2

將這個:

this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

在此之前:

setContentView(R.layout.alarm); 

the docs on requestWindowFeature(強調):

啓用擴展屏功能。 這必須在setContentView()之前調用。只要它在setContentView()之前,可以根據需要調用多次。如果未調用,則不會提供擴展功能。一旦請求就無法關閉功能。您可以使用FEATURE_CUSTOM_TITLE的其他標題功能。

+0

我仍然得到同樣的錯誤。 requestWindowFeature的功能是什麼? – MAJ

+0

@MAJ這是你的代碼,你告訴我。我也願意打賭,你沒有得到完全相同的錯誤,但只是類似的東西,因爲['setFlags'的文檔](http://developer.android.com/reference/android/view/Window。 html#setFlags(int,%20int))也提到可能需要在'setContentView'之前調用。 – blahdiblah

相關問題