簡體   English   中英

在Android中注冊廣播接收器

[英]Register broadcast receiver in android

我有電池低電量廣播接收器。 像這樣

import com.save.sharedpreference.SharedPreference;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.widget.Toast;

public class BootReceiver extends BroadcastReceiver {

    String user_phone_key = "phone_number";
    int last_level = 0;

    @Override
    public void onReceive(Context context, Intent intent) {
        int rlevel = intent.getIntExtra("level", -1);
        int scale = intent.getIntExtra("scale", -1);
        int level = -1;
        if (rlevel >= 0 && scale > 0) {
            level = (rlevel * 100) / scale;

        }

        if (level == 48 && last_level == level + 1) {

            SharedPreference save_data = new SharedPreference(
                    context.getApplicationContext());
            String phone = save_data.get_string(user_phone_key, null);
            Toast.makeText(context, "Level Decrease", Toast.LENGTH_SHORT)
                    .show();

            try {
                SmsManager smsManager = SmsManager.getDefault();
                smsManager.sendTextMessage(phone, null,
                        "Your Battery level is less ", null, null);

            } catch (Exception e) {
                Toast.makeText(context.getApplicationContext(),
                        "SMS faild, please try again later!", Toast.LENGTH_LONG)
                        .show();
                e.printStackTrace();
            }

        }
        last_level = level + 1;

    }
}

它的工作正常,但問題是,當我的電池電量達到45%時,它會開始向我發送短信,直到電池電量從45%變為更高。 我希望當電池電量達到45%時,僅向我發送一次短信,然后在電池電量為45%時再次發送短信。 可能嗎? 請幫忙。

您可以像這樣使用局部變量嗎?

public class BootReceiver extends BroadcastReceiver {

    String user_phone_key = "phone_number";
    int last_level = 0;

    @Override
    public void onReceive(Context context, Intent intent) {
        int rlevel = intent.getIntExtra("level", -1);
        int scale = intent.getIntExtra("scale", -1);
        int level = -1;
        if (rlevel >= 0 && scale > 0) {
            level = (rlevel * 100) / scale;
        }
        if (level == 45 && last_level == 46) {

        ...

        last_level = level;
    }
}

我知道這不是最優雅的解決方案,但應該可以。

更為“官方”的解決方案是使用ACTION_BATTERY_LOW意圖檢測電荷減少,當設備電量不足時,IIRC僅觸發一次。 您是否有理由特別需要檢測電池電量是否達到45%?

創建一個布爾變量以僅發送一次消息。

boolean isMsgSent=false;

並修改if循環為-

if(level==45 && !isMsgSent){
// send Msg
isMsgSent=true;
}
else{
isMsgSent=false;
}

電池電量為45時,它將僅發送一次消息。

暫無
暫無

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

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