2011-10-02 6 views
0

이벤트 리스너를 구현하는 방법을 알아 봅니다. (적절한 용어인지 확실하지 않습니다.) 일단 앱을 시작한 후 휴대 전화의 전원 상태를 수신하려면 서비스를 원합니다. . 나는 안드로이드가 어떻게 이런 상황을 처리하는지에 대해 확신 할 수 없으므로 무엇을 검색해야할지 정말로 모른다. 브로드 캐스트 수신기를 사용하는이 코드로 작업했습니다.Android : 지속적인 이벤트 리스너 만들기

BroadcastReceiver receiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      unregisterReceiver(this); 
      int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
      if (plugged == BatteryManager.BATTERY_PLUGGED_AC) { 
       // on AC power 
       Toast.makeText(getApplicationContext(), "AC POWER", Toast.LENGTH_LONG).show(); 
      } else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) { 
       // on USB power 
      Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show(); 
       startActivity(alarmClockIntent); 
      } else if (plugged == 0) { 
       Toast.makeText(getApplicationContext(), "On Battery", Toast.LENGTH_LONG).show(); 
      } else { 
       // intent didnt include extra info 
      } 
     } 
    }; 
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    registerReceiver(receiver, filter); 

코드가 정상적으로 작동합니다. 내 애플 리케이션을 열면 그것은 전화 전원의 현재 상태가 무엇인지 축하합니다. 여기

는 내가 뭘하려고 오전입니다 :
  • 사용자가 응용 프로그램을 실행

    , 그것은 효과적으로 서비스
  • 전화 사용에 대한 갈 수있는 사용자에 돌고 있지만, 한 번이 연결되어 에서 내 서비스가이를 잡아서 위의 코드를 사용합니다

위의 목표를 달성하기 위해이 코드를 어떻게 적용합니까?

당신은 라인

 
unregisterReceiver(this); 

이 방법을 제거하여 배터리 상태에 대한 리스너를에 유지할 수

+0

사용자가 AC/USB 전원에 플러그를 꽂았지만 사용자는 플러그 할 때 코드에서 동일한 동작을 트리거하는 방법을 묻고 있습니다. 현재 앱을 사용하고 있지 않습니다 ('휴대 전화 사용'이라는 단어에서)? – momo

+0

네, 그렇습니다. 올바른 전문 용어가 확실하지 않습니다. – Nick

답변

1

는 응용 프로그램은 응용 프로그램이 실행되고 있지 않음에도 불구하고 백그라운드에서 전원 상태 변경을들을 계속 포 그라운드에서. 어느 시점에서는 수신자의 등록을 취소 할 수 있습니다. 사용자가 설정을 통해 해당 설정을 제어 할 수있게하려는 경우 일 수 있습니다.

다른 한 노트, 코드는 다음 코드에서 수신기에서 활동을 시작 포함 : 활동이 백그라운드에있는 경우


else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) { 
    // on USB power 
    Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show(); 
    startActivity(alarmClockIntent); 
} 

는 다음 다른 활동을 시작할 수 없습니다. this SO Question - how to start activity when the main activity is running in background?을 참조하십시오. 허용 ​​된 대답에는 백그라운드에서 작업을 시작해야하는 상황을 처리하는 방법에 대한 제안이 있습니다.