2017-11-03 16 views
0

배터리 전류 및 전압을 5 초 간격으로 가져오고 싶습니다.고정 된 간격으로 배터리 전류를 얻는 방법?

그러나 내 소스에서 전압 및 전류는 임의의 간격으로 변경됩니다. 내가 브로드 캐스트 리시버를 들어 같은 5 초 10 초 구초, .......

10 초 이내에 반환 값이 필요합니다.

나는 이것이 원인이라고 생각하지만이 문제를 해결하는 방법을 모른다.

package com.example.hubertlee.batterywearrate; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.BatteryManager; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 
    private TextView batteryInfo; 
    Long avgCurrent = null, currentNow = null; 
    int count = 0; 
    float power = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    BatteryManager mBatteryManager = (BatteryManager) getSystemService(Context.BATTERY_SERVICE); 
    batteryInfo = (TextView) findViewById(R.id.textViewBatteryInfo); 
    this.registerReceiver(this.batteryinfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     avgCurrent = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE); 
     currentNow = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW); 
    } 

} 



private BroadcastReceiver batteryinfoReceiver = new BroadcastReceiver(){ 
    public void onReceive(Context context, Intent intent){ 

     int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0); 
     int icon_small = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0); 
     int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
     int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); 
     boolean present = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); 
     int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0); 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0); 
     String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); 
     float temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0); 
     float voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0); 
     batteryInfo.setText("Health: " + health + "\n" + "Icon small : "+icon_small+"\n" + 
       "Level : "+level+"\n"+"Present : "+present+"\n"+"Scale: "+ 
       scale+"\n"+"Status :"+status+"\n"+ "Technology:"+technology+"\n"+ 
       "Temperature :"+temp/10+"'C\n"+"Voltage:"+voltage/1000+"V\n"+"BATTERY_PROPERTY_CURRENT_AVERAGE = " 
       + avgCurrent + "mAh"+"\n"+"BATTERY_PROPERTY_CURRENT_NOW = " + currentNow + "mAh"+"\n"+"count ="+count); 
     count++; 




    } 
    }; 
} 
+0

* BroadcastReceiver에서 10 초 이내에 반환 값이 필요하다고 들었습니까? (당신이 뭔가를 오해 한 것처럼 보입니다. 나는'onReceive'의 임 플레 케이션에 대한 것이 었습니다.) * 나는 이것이 원인이라고 생각합니다. * 아닙니다, 그렇지 않습니다 ... action은 "ACTION_BATTERY_CHANGED"입니다. "BATTERY CHANGED"(배터리 교체) 때 발송됩니다 ... 변경 사항이없는 경우 무언가를 보낼 필요가 없습니다 - 자원 낭비입니다 – Selvin

+0

답장을 보내 주셔서 감사합니다. 그렇다면 어떻게 간격을두고 전류를 얻을 수 있습니까? 안돼? 고정 된 간격이 필요해. –

답변

0

당신이 수정 간격으로 실행 코드를 가지고 알람 매니저를 살펴 먹고 싶어 경우 Selvin 말했듯이 변경하면 https://developer.android.com/reference/android/app/AlarmManager.html

, 방송 만 호출됩니다.

+0

답장을 보내 주셔서 감사합니다. 나는 작은 질문이있다. 나는 전화기의 전압과 전류가 끊임없이 변화한다고 생각한다. 전화가 불규칙하게 전기를 사용하기 때문입니다. 그렇다면 왜 10 초 안에 전류와 전압을 한 번 보내야합니까? 매초마다, 초당 1 초마다, 모든 초 단위로 변경됩니다. –

+0

시스템에서 브로드 캐스트 메시지를 자주 전송할 수 없기 때문에 브로드 캐스트 메시지가 전달됩니다. 방송 메시지는 우선 순위가 낮습니다. 이것은 지연을 설명 할 수 있습니다. – Lionel

+0

아. 알 겠어. 정말 고맙습니다. 화면을 켜기 때문에 Handler를 사용하기로 결정했습니다. 방송없이 BatteryManager를 사용하는 방법을 알고 있습니까? https://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED 배터리 속성을 얻기 위해 브로드 캐스트를 사용한다고 생각합니다 ...? –