我已经注册了低电量广播接收器。 像这样
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/