2012-09-03 4 views
1

나는 Android to New B입니다. 나는 다음 코드로 배터리 상태/레벨을 얻을 수 있었다 :배터리 레벨 상태 저장 txt 파일

private void BattStatus() { 
     BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() { 
      public void onReceive(Context context, Intent intent) { 
       context.unregisterReceiver(this); 
       int rawlevel = intent.getIntExtra("level", -1); 
       int scale = intent.getIntExtra("scale", -1); 
       int level = -1; 
       if (rawlevel >= 0 && scale > 0) { 
        level = (rawlevel * 100)/scale; 
       } 
       batteryLevel = level; 
       BattStatus.setText("Battery Level : " + batteryLevel + "%"); 

      } 
     }; 
     IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(batteryLevelReceiver, batteryLevelFilter); 
    } 

내가 (스레드를 사용하여) 텍스트 파일에 배터리 잔량을 저장하고 싶습니다. 코드 : 나는 올바른 값을 반환 스레드에서 로그인 기능을 사용하여 테스트 할 때

public final Runnable DBThread = new Runnable() { 
     String AllInfo = batteryLevel+"%"+" , "+new SimpleDateFormat("HH:mm , dd.MM.yy ").format(new Date()); 
     public void run() { 
      try { 
       Log.d("DBThread","Battery :"+batteryLevel); 
       Log.d("DBThread","Updating DB"); 
       myDbHelper.CreateAndWriteFile(sdDir+"/", AllInfo); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     mHandler.postAtTime(this, SystemClock.uptimeMillis() + 2000); 
     Log.d("DBThread","Updated DB"); 
     Log.d("DBThread",AllInfo); 

    } 

불행하게도 배터리 상태/레벨, 텍스트 파일에 0 %를 반환합니다.

내가 잘못하고있는 일이나 내가하지 않는 일을 알려주는 사람이 친절 할 수도 있으며, 개발에 익숙하지 않은 경우 코드 스 니펫을 제공 할 수도 있습니다. 내 게시물이 잘못된 경우 죄송합니다. 첫 번째 타이머 on Stack Overflow :)

대단히 고마워요!

답변

1

이것은 스레드가 아닙니다. 이것은 Runnable로 Thread에서 실행되도록 만들어진 코드입니다.

귀하의 경우에는 UI 스레드 인 핸들러 스레드에서 실행됩니다.

배터리 상태를 받기 전에 스레드를 시작하여 파일에 기본값 (0)을 쓰는 것이 좋습니다.

스레드를 필요로하지 않습니다. onReceive 메서드에서 브로드 캐스트를받은 후 즉시 파일에 쓸 수 있습니다.

편집

코드에서 작동하지 않는 몇 가지가 있습니다. 브로드 캐스트 리시버의 등록을 취소하면 처음으로 배터리 레벨을받지 못합니다.

당신은 그것이 실제로 변경이있는 모르게

당신은 매 2 초마다 쓰기

을 수정 된 경우 모른 채 batteryLevel 값을 작성합니다.

BR 등록을 취소하지 않았 으면 모든 배터리 잔량이 변경 될 것을 제안합니다. 그런 다음 onReceive에서 날짜와 새 값을 파일에 추가합니다.

+0

수신 방법에서이 작업을 수행하는 방법에 대한 간단한 예를 들어 주시겠습니까? – Nequita

+0

나는 run 메소드의 내용을 onReceive 메소드 안에 직접 넣을 것이다. 내 편집보기 – njzk2