2011-01-31 2 views
1

사용자가 CheckBox을 확인하고 TimePickerDialog에 시간을 설정하고 시간이 오기 시작하면 BroadcastReceiver을 통해 서비스가 시작되고 6 초마다 음악이 재생됩니다. 덕분에이 앱은 Service이지만 음악을 재생할 때마다 6 초마다 계속 재생됩니다. 마찬가지로 CheckBox의 상태를 저장하기 위해 다른 서비스를 만들었습니다. 시간이 지나도 사용자가 닫히고 응용 프로그램이 열리면 CheckBox가 여전히 체크인되어야합니다. 확인란의 상태를 관리하기 위해 전역 변수를 만들었 기 때문에서비스 질문

main.java는 :

Intent intentA = new Intent(main.this, AlarmReceiverA.class); 
PendingIntent pendingIntentA = PendingIntent.getBroadcast(main.this, 0, 
     intentA, PendingIntent.FLAG_ONE_SHOT); 
alarmManagerA = (AlarmManager) getSystemService(ALARM_SERVICE); 
Calendar now = Calendar.getInstance(); 
alarmManager.set(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), pendingIntentA); 
Toast.makeText(main.this, "Present time: " + 
     String.valueOf(now.getTime()), Toast.LENGTH_SHORT).show(); 

이 쉽게 AlarmReceiver 시작 서비스입니다 :

public final class AlarmReceiverA extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "AlarmA worked.", Toast.LENGTH_LONG).show(); 
     context.startService(new Intent(context, MyServiceA.class)); 
    } 
} 

그리고 이것은 MyServiceA.class입니다 :

@Override 
public void onCreate() { 
    Toast.makeText(this, "My ServiceA Created", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onCreate"); 
    GlobalVars.setTimeWatch(1); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "My ServiceA Stopped", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onDestroy"); 
} 

@Override 
public void onStart(Intent intent, int startid) { 
    Toast.makeText(this, "My ServiceA Started", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onStart"); 
    GlobalVars.setTimeWatch(1); 
} 

"My ServiceA Started"토스트 메시지가 표시되므로 지금까지 작동되었습니다. 변수를 1로 설정하더라도 문제가 발생합니다. GlobalVars.setTimeWatch(1) 앱을 다시 시작하면 다시 표시되지 않습니다. main.java에서

나는이 변수의 값을 검사하고 있습니다 :

public void onResume() { 
    super.onResume(); 
    Toast.makeText(main.this, String.valueOf(GlobalVars.getTimeWatch()), 
      Toast.LENGTH_SHORT).show(); 
} 

을하지만 점점 오전 모든 나는 새 화면을 열 때 (클릭으로 예 때문에 0 문제는, 서비스에 있어야합니다 버튼을 누른 다음 돌아가서, 나는 "1"의 값으로 토스트 메시지를 얻는다.

  1. CheckBox의 상태를 저장하는 방법입니까?
  2. 코드에 어떤 문제가 있습니까?

나는이 함께 노력하고 있습니다 :

@Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putBoolean("MyBoolean", cbstate); 
    super.onSaveInstanceState(savedInstanceState); 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    myb = savedInstanceState.getBoolean("MyBoolean"); 
} 

cbstate이 부울 변수입니다. 난 항상 "확인되지 않음"얻을 응용 프로그램을 다시 시작한 후

if (myb == true) 
     { 
      cb1.setChecked(true); 
      Toast.makeText(main.this, "checked", Toast.LENGTH_SHORT).show(); 
     } 
     else 
     { 
      cb1.setChecked(false); 
      Toast.makeText(main.this, "Not checked", Toast.LENGTH_SHORT).show(); 
     } 

다음에서 onCreate 방법은 내가 cbstate의 값을 검사하고있다.

답변

0

공개 질문을 찾아 볼 때이 질문을 발견했으며 거의 ​​2 년 전에 질문을 받았지만 다른 사람들을 돕기 위해 대답해야합니다. 이 특정 문제에 대한 해결책을 추가하지는 않겠다. 그러나 나는 나의 작업 예제 중 하나를 기반으로해야만했던 것을 말할 것이다. 따라서 이것은 BroadcastReceiver에서 값을 검색하는 방법이 아닙니다. 인 텐트를 사용할 때 put 명령을 사용하여 변수를 저장해야합니다. 여기에 활동

나는 세 가지 변수를 반복 알람을 설정하고 있습니다 :

int REQUEST_CODE = (int) (cal_now.getTimeInMillis()/1000); 
    Intent intent = new Intent(NewSchedule.this, RepeatingAlarm.class); 
    intent.putExtra("endTime", cal_alarmend.getTimeInMillis()/1000); 
    intent.putExtra("reqCode", REQUEST_CODE); 
    intent.putExtra("startTime", cal_alarmstart.getTimeInMillis()/1000); 
    PendingIntent sender = PendingIntent.getBroadcast(NewSchedule.this, REQUEST_CODE, intent, 0); 
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarmstart.getTimeInMillis(), 6000, sender); 

을 나는 번들 사용하는 브로드 캐스트 리시버 클래스의 onReceive() 메소드에서 값 검색 :

public class RepeatingAlarm extends BroadcastReceiver { 

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

     Bundle b = intent.getExtras(); 
     long end = b.getLong("endTime") * 1000; 
     int rc = b.getInt("reqCode"); 
     long start = b.getLong("startTime") * 1000; 
     Log.i("rc", rc + ""); 
     Log.i("now", now + ""); 
     Log.i("start", start + ""); 

     } 
    }