2013-11-04 26 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

相关问题