2013-04-14 21 views
0

我正在研究一個會在屏幕上產生報警的應用程序。每按一次按鈕,每小時一次。我有一個類定義了AlarmManager,WakeLock和一個窗口,當觸發警報時它將在全屏上打開,我從MainActivity.class啓動它。但我沒有任何錯誤,報警將無法運行。我是一個新手,請給我一個正確的方向。我已經完成了我的研究,但我根本找不到我的代碼出了什麼問題。帶WakeLock的AlarmManager不起作用

MyAlarmReceiverActivity代碼:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
    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); 
    setContentView(R.layout.alarm); 

    Button stopAlarm = (Button) findViewById(R.id.btnStopAlarm); 
    stopAlarm.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) 
     { 
      mMediaPlayer.stop(); 
      finish(); 
     } 
    }); 
    playSound(this, getAlarmUri()); 
} 

private void playSound(Context context, Uri alert) 
{ 
    mMediaPlayer = new MediaPlayer(); 
    try 
    { 
     mMediaPlayer.setDataSource(context, alert); 
     final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM)!=0) 
     { 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.start(); 
     } 
    }catch (IOException e) 
    { 
     Log.i("AlarmReceiver","No audio files are found!"); 
    } 
} 

private Uri getAlarmUri(){ 
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alert == null) 
    { 
     alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     if (alert == null) 
     { 
      alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); 
     } 
    } 
    return alert; 
} 

protected void onStop() 
{ 
    super.onStop(); 
    mWakeLock.release(); 
} 

在我的主要活動我與這個代碼

public void spusteniePripomienok(){ 
    Toast.makeText(this, "Spustil si pripomienky každých "+ interval, Toast.LENGTH_SHORT).show(); 

    Intent intent = new Intent(MainActivity.this, AlarmRecieverActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 2, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(MainActivity.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent); 
} 
+0

我會今天試試,讓你知道它是否有幫助,謝謝 – MichalCh

+0

對不起沒有設法讓它爲我的工作,ive改變了alarmreceiver的通知。它不是更好,但易於編碼。 Meybe的問題很簡單,但我沒有時間玩它:) – MichalCh

回答

1

你可以嘗試改變你的電源管理器的代碼是這樣的,看它是否工作運行它:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
mWakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
      | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK 
      | PowerManager.ON_AFTER_RELEASE, ""); 
mWakeLock.acquire(); 
+0

Thx響應,但仍然無法正常工作 – MichalCh