繁体   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