2015-01-12 2 views
0

영어 글을 잘 못하면 사전에 사과드립니다. 나는 특정 시간에 알람을 생각 나게하는 간단한 태스크 앱을 작성 중이다.웨이크 잠금 장치가 제대로 작동하지 않습니다.

나는 알람 관리기로 알람을 설정 아래 :

private static void setAlarm(Context context, Calendar calendar, 
     PendingIntent pIntent) { 
    AlarmManager alarmManager = (AlarmManager) context 
     .getSystemService(Context.ALARM_SERVICE); 
    if (android.os.Build.VERSION.SDK_INT >= 
      android.os.Build.VERSION_CODES.KITKAT) { 
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, 
      calendar.getTimeInMillis(), pIntent); 
    } else { 
     alarmManager.set(AlarmManager.RTC_WAKEUP, 
      calendar.getTimeInMillis(), pIntent); 
    } 
} 

다음 AlarmManagerHelper :

public class AlarmManagerHelper extends BroadcastReceiver { 

    public void onReceive(Context context, Intent intent) { 
     String title = intent.getStringExtra("Title"); 
     int hour = intent.getIntExtra("Hour", 0); 
     int min = intent.getIntExtra("Minute", 0); 
     String alarmTone = intent.getStringExtra("AlarmTone"); 
     Intent i = new Intent(); 
     i.setClassName("com.example.tasks", 
      "com.example.tasks.AlarmScreenActivity"); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     i.putExtra("Title", title); 
     i.putExtra("Hour", hour); 
     i.putExtra("Minute", min); 
     i.putExtra("AlarmTone", alarmTone); 
     context.startActivity(i); 
    } 
} 

및 AlarmScreenActivity은 다음과 같습니다 AlarmManagerHelper 및 AlarmScreenActivity이 표시와 다음

public class AlarmScreenActivity extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // get intent 
     pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 
     wl.acquire(); 
     mPlayer = new MediaPlayer(); 
     try { 
      if (task_Tone != null && !task_Tone.equals("")) { 
       android.net.Uri toneUri = android.net.Uri.parse(task_Tone); 
       if (toneUri != null) { 
        mPlayer.setDataSource(this, toneUri); 
        mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
        mPlayer.setLooping(true); 
        mPlayer.prepare(); 
        mPlayer.start(); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    // some code 
    public void onClickDissmis(View view) { 
     mPlayer.stop(); 
     finish(); 
    } 

    protected void onDestroy() { 
     super.onDestroy(); 
     wl.release(); 
    } 
} 

.

내 문제는 :특정 시간에 일어나야하고 inting을 울리지 않아야하므로 전원 버튼을 누르면 작동하는 화면이 나타납니다. (디버그 모드에 있고 시스템에 연결된 장치가 제대로 작동하는 경우) 내 문제를 완벽하게 설명하기를 바랍니다.

답변

0

정확하게 문제를 이해하지 못합니다. 나는 안드로이드 만이 을 보장한다고 말할 수있다.은 방송을 전달하는 동안 wakelock을 들고있다. 코드는 수신자가 브로드 캐스트를 수신 할 때와 wakockock을 점유 할 때 사이에 상당한 시간을두고 있습니다. 그 간격으로 장치가 다시 잠자기 상태가되는 것을 막을 수있는 방법은 없습니다.

+0

답장을 보내 주셔서 감사합니다.이 AlarmScreenActivity의 버튼에 onclick : 'public void onClickDissmis (보기보기) { \t \t mPlayer.stop(); \t \t finish(); \t \t \t} '코드 아래에 넣어야한다고 생각합니다. – AsmA

+0

나는 내 게시물을 편집했습니다 ... 더 잘 설명 된 희망 ... 죄송합니다. – AsmA

0

AlarmManagerHelper.onReceive이 실행되는 동안 시스템은 실패하지 않는 (알람 관리자 때문에) 잠금을 보유합니다. 그러나 context.startActivity(i);과 활동 시작 사이에 시스템이 다시 잠든다. WakefulBroadcastReceiver (BroadcastReceiver Vs WakefulBroadcastReceiver 참조) 또는 (내가 사용하는 것) WakefulIntentService을 사용해야합니다.

어쨌든 서비스를 시작하고 거기에서 활동을 시작해야합니다. WakefulIntentService 패턴은 내 대답 PowerManager.PARTIAL_WAKE_LOCK android을보고 거기에 링크되어 있습니다.