2013-04-14 3 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는 알림 수신자를 변경했습니다. 더 나은 것은 아니지만 코드 작성이 쉽습니다. Meybe 문제는 간단하지만 나는 그걸 가지고 노는 시간이 없다 :) – MichalCh

답변

1

당신이 그것을 작동하는지 확인하기 위해이 같은에 PowerManager 코드를 변경하려고 할 수있는이 코드를 실행하고 있습니다 :

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

관련 문제