为什么我的代码不带手机电池同步?

问题描述 投票:1回答:1

我尝试一些代码,但它不符合我的手机电池防爆同步:我的手机电池72%,但它始终显示100%或不会上下。此代码犯规请求的任何特殊权限

public class MainActivity extends AppCompatActivity {
    private Context mContext;
    private TextView mViewInfo;
    private TextView mViewPercentage;
    private ProgressBar mProgressBar;
    private int mProgressStatus = 0;

    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            mViewInfo.setText("Battery Scale : " + scale);

            int level = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            mViewInfo.setText(mViewInfo.getText() + "\nBattery Level : " + level);

            float percentage = level/ (float) scale;
            mProgressStatus = (int)((percentage)*100);
            mViewPercentage.setText("" + mProgressStatus + "%");
            mViewInfo.setText(mViewInfo.getText() + "\nPercentage : " + mProgressStatus + "%");
            mProgressBar.setProgress(mProgressStatus);
        }
    };

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

        mContext = getApplicationContext();
        IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        mContext.registerReceiver(mBroadcastReceiver, iFilter);
        mViewInfo = (TextView) findViewById(R.id.tv_info);
        mViewPercentage = (TextView) findViewById(R.id.tv_percentage);
        mProgressBar = (ProgressBar) findViewById(R.id.pb);
    }
}

我希望我的代码将与手机电池有同步总是说所有的100%的假设是用电池同步

java android
1个回答
0
投票

你的问题是由你的这部分代码引起的:

int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
mViewInfo.setText("Battery Scale : " + scale);

int level = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
mViewInfo.setText(mViewInfo.getText() + "\nBattery Level : " + level);

float percentage = level/ (float) scale;
mProgressStatus = (int)((percentage)*100);

如果你发现,你会看到你使用intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)两者的规模和水平。

这意味着你得到的值完全相同,所以当你去尽你的level / (float) scale;你几乎做NUM / NUM计算,这将始终等于1。然后当你1 * 100,它会始终等于100。

你需要做的是更换:

int level = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

有:

int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
© www.soinside.com 2019 - 2024. All rights reserved.