android - 在android中注册广播接收器

标签 android android-broadcast batterylevel

我已经注册了低电量广播接收器。 像这样

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 Intent 来检测电量减少,当设备电池​​电量不足时,IIRC 只会触发一次。您是否需要特别检测电池电量是否达到 45%?

关于android - 在android中注册广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683800/

相关文章:

Android 下拉列表(iPhone 风格)

java - 为什么Android模拟器编号像5554

android - 本地广播空指针异常

android - 如何在 onStop() 中检查屏幕开/关状态?

ios - 如何准确获取iPhone电池电量?

android - 如何创建带有电池电量的永久通知?

android - 在 Android 模拟器上安装 Flash Player

iphone - 将视频从 iPhone 或 Android 流式传输到 RTMP

android - sleep 期间未收到警报

android - Android BatteryManager 类中 EXTRA_LEVEL 的意义