簡體   English   中英

BroadCast接收器電池狀態錯誤

[英]BroadCast Receiver Battery Status error

我正在嘗試在我的項目中使用廣播接收器,該接收器監聽充電/不充電的電池狀態,並在每個選項中吐司。 每次我在應用程序中更改充電器狀態時,應用程序都會崩潰。 (如果我在連接了充電器的情況下啟動應用,這會告訴我正確的吐司功能,但是當我為手機充電時,應用會崩潰),這是代碼,在此先感謝

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

    if(isCharging==true){

        Toast.makeText(this, "Charging", Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(this, "Charger not connected", Toast.LENGTH_SHORT).show();

更新我很難理解我應該做的事情。 我很新,所以請耐心等待我:)

這是我做的代碼

    public class MainActivity extends Activity  {

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

            checkBatteryState(null);


        public void checkBatteryState(View sender) {
            IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
            Intent batteryStatus = registerReceiver(null, filter);

            int chargeState = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            String strState;

            switch (chargeState) {
                case BatteryManager.BATTERY_STATUS_CHARGING:
                case BatteryManager.BATTERY_STATUS_FULL:
                    strState = "charging";
                    Toast.makeText(this, strState, Toast.LENGTH_LONG).show();
                    break;
                default:
                    strState = "not charging";
                    Toast.makeText(this, strState, Toast.LENGTH_LONG).show();
            }
        }
    }

http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html

這是您正在使用的嗎?

也許您還沒有確定自己的意圖是粘滯的。

我的建議是不要使用帶有null參數的registerreceiver。

嘗試使用以下方法創建廣播接收器: 如何將數據發送到尚未啟動的另一個應用程序

將您的Toasts放在onReceive()函數中。

該代碼實際上並沒有注冊接收者,只是進行了粘性廣播。 如果從未發送過廣播,則它將返回null,這將在其余代碼中導致NPE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM