2012-02-21 3 views
2

android-er, 주요 활동 (AndroidScheduledActivity.java)은 AlarmManager를 시작하여 BroadcastReceiver (MyScheduledReceiver.java)를 반복적으로 시작합니다. MyScheduledReceiver의 onReceive() 메소드에서, 다른 활동 (MyScheduledActivity.java)을 간접적으로 시작합니다. 활동 (MyScheduledActivity.java)이 예약 된 간격으로 시작됩니다. 이제 AutoStart를 사용하여 자동으로 시작하지만 AutoStartNotifyReceiver를 쓸 수 없었습니다. 관리 방법을 알려주세요. 감사합니다.예약 된 활동을 시작하기 위해 AlarmManager를 자동 시작하는 방법?

주요 활동, AndroidScheduledActivity.java :

public class AndroidScheduledActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button buttonStart = (Button)findViewById(R.id.start); 
     buttonStart.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
    Intent myIntent = new Intent(getBaseContext(), 
     MyScheduledReceiver.class); 

    PendingIntent pendingIntent 
    = PendingIntent.getBroadcast(getBaseContext(), 
     0, myIntent, 0); 

    AlarmManager alarmManager 
     = (AlarmManager)getSystemService(ALARM_SERVICE); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 10); 
    long interval = 60 * 1000; // 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
     calendar.getTimeInMillis(), interval, pendingIntent); 
    finish(); 
    }}); 
    } 

} 

그리고 브로드 캐스트 리시버, MyScheduledReceiver.java

public class MyScheduledReceiver extends BroadcastReceiver { 

public void onReceive(Context context, Intent intent) { 

Intent scheduledIntent = new Intent(context, MyScheduledActivity.class); 
scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(scheduledIntent); 
} 
} 

내 문제 AutoStartNotifyReceiver :

public class AutoStartNotifyReceiver extends BroadcastReceiver { 

private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED"; 

@Override 
public void onReceive(Context context, Intent intent) { 

    if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){ 

???????????????????? 

    } 

} 
} 

답변

5

귀하의 AutoStartNotifyReceiver extends BroadcastReceiver 클래스가 있기 때문이 기기가 재설정되면 알람이 지워집니다. . 따라서이 클래스의 onReceive (물음표가있는 곳)에 onClick 메서드에서 처음 사용했던 것과 동일한 코드 (물론 finish() 제외)를 사용하여 알람을 다시 설정해야합니다. AndroidScheduledActivity입니다.

다음 Manifest의 권한뿐만 아니라

<receiver android:name=".AutoStartNotifyReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
</receiver> 

:

그런 다음, 시스템이 최대 당신의 AutoStartNotifyReceiver 시스템 부팅시를 시작 알려 당신의 Manifest에 다음 항목을 둘 필요

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

지금은 하나의 알람 만 있고 매회 한 방향으로 만 설정한다고 가정합니다. 그 이상이 아닌 경우 조금 더 복잡해집니다. 하지만 당신이 제공 한 작은 정보를 바탕으로, 내 솔루션은 당신이 원하는대로해야합니다.

또한 신입 회원이기 때문에 질문에 대한 적절한 대답을 누군가가 제공 할 때 질문 옆에있는 확인란을 클릭하여 대답을 수락합니다. 이것은 응답하는 사람이 신용을 얻는 것입니다. SO에 오신 것을 환영합니다!

1

덕분에 작동합니다. 그냥 내 자바 좀 더 향상시킬 필요가있다. 나는 왜 "문맥"을 추가해야만하는지 정확히 알지 못한다.

public class AutoStartNotifyReceiver extends BroadcastReceiver { 
    private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED"; 
    public void onReceive(Context context, Intent intent) { 
     if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){ 

      Intent myIntent = new Intent(context, MyScheduledReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0); 

      AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.add(Calendar.SECOND, 10); 
      long interval = 60 * 1000; 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);   
     } 
    } 
} 
관련 문제