From e11123de07b3fdb236277da61038aa96558db937 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Mon, 27 Sep 2021 11:57:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BD=8E=E7=94=B5=E9=87=8F?= =?UTF-8?q?=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 8 +- .../RebootBroadcastReceiver.java | 5 +- .../SmsForwarderBroadcastReceiver.java | 7 -- .../idormy/sms/forwarder/MainActivity.java | 9 +- .../idormy/sms/forwarder/MyApplication.java | 1 + .../idormy/sms/forwarder/SettingActivity.java | 23 ++++ .../sms/forwarder/service/BatteryService.java | 108 ++++++++++++++++++ .../forwarder/{ => service}/FrontService.java | 67 ++++++++++- .../idormy/sms/forwarder/utils/Define.java | 1 + .../sms/forwarder/utils/SettingUtil.java | 12 ++ app/src/main/res/layout/activity_setting.xml | 40 +++++++ 11 files changed, 261 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java rename app/src/main/java/com/idormy/sms/forwarder/{ => service}/FrontService.java (51%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c6eb3bca..f60682b3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,9 +2,6 @@ - @@ -22,6 +19,8 @@ + - - + \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java index 96cdacbe..40969d2b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/RebootBroadcastReceiver.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.os.Build; import android.util.Log; -import com.idormy.sms.forwarder.FrontService; +import com.idormy.sms.forwarder.service.FrontService; import com.idormy.sms.forwarder.utils.InitUtil; public class RebootBroadcastReceiver extends BroadcastReceiver { @@ -26,6 +26,9 @@ public class RebootBroadcastReceiver extends BroadcastReceiver { } else { context.startService(frontServiceIntent); } + //监控当前电量 + //Intent batteryServiceIntent = new Intent(context, BatteryService.class); + //context.startService(batteryServiceIntent); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java index 6ae799bc..63bbfe2d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/BroadCastReceiver/SmsForwarderBroadcastReceiver.java @@ -91,13 +91,6 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver { Log.e(TAG, "解析短信失败:" + throwable.getMessage()); } - } else if (intent.ACTION_BATTERY_CHANGED.equals(receiveAction)) { - //获得当前电量 - intLevel = intent.getIntExtra("level", 0); - //获得手机总电量 - intScale = intent.getIntExtra("scale", 100); - int percent = intLevel * 100 / intScale; - Log.d(TAG, "当前电量:" + percent + "%"); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java index 5191ef7e..dfd015dd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java @@ -18,6 +18,9 @@ import android.widget.AdapterView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + import com.idormy.sms.forwarder.BroadCastReceiver.SmsForwarderBroadcastReceiver; import com.idormy.sms.forwarder.adapter.LogAdapter; import com.idormy.sms.forwarder.model.vo.LogVo; @@ -31,9 +34,6 @@ import com.umeng.analytics.MobclickAgent; import java.util.ArrayList; import java.util.List; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; - public class MainActivity extends AppCompatActivity implements ReFlashListView.IReflashListener { ServiceConnection conn = new ServiceConnection() { @@ -203,6 +203,7 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I builder.setPositiveButton("重发", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + System.out.println(logVo.toString()); Long id = logVo.getId(); Log.d(TAG, "id = " + id); Log.d(TAG, logVo.toString()); @@ -299,7 +300,7 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I protected void onResume() { super.onResume(); MobclickAgent.onResume(this); - //第一次打开,申请权限前无法获取SIM信息,尝试在此重新获取 + //第一次打开,申请权限前无法获取SIM信息,尝试在此重新获取 if (MyApplication.SimInfoList.isEmpty()) { MyApplication.SimInfoList = PhoneUtils.getSimMultiInfo(); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java index 64fd03c9..4495ac27 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java @@ -11,6 +11,7 @@ import android.text.TextUtils; import android.util.Log; import com.idormy.sms.forwarder.sender.SendHistory; +import com.idormy.sms.forwarder.service.FrontService; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.PhoneUtils; import com.idormy.sms.forwarder.utils.SettingUtil; diff --git a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java index 0f8cba94..883dc422 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java @@ -38,6 +38,9 @@ public class SettingActivity extends AppCompatActivity { EditText et_add_extra_sim2 = (EditText) findViewById(R.id.et_add_extra_sim2); editAddExtraSim2(et_add_extra_sim2); + EditText et_battery_level_alarm = (EditText) findViewById(R.id.et_battery_level_alarm); + editBatteryLevelAlarm(et_battery_level_alarm); + Switch switch_sms_template = (Switch) findViewById(R.id.switch_sms_template); switchSmsTemplate(switch_sms_template); @@ -124,6 +127,26 @@ public class SettingActivity extends AppCompatActivity { }); } + //设置低电量报警值 + private void editBatteryLevelAlarm(final EditText et_battery_level_alarm) { + et_battery_level_alarm.setText(SettingUtil.getBatteryLevelAlarm()); + + et_battery_level_alarm.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + SettingUtil.setBatteryLevelAlarm(et_battery_level_alarm.getText().toString()); + } + }); + } + //设置转发时启用自定义模版 private void switchSmsTemplate(Switch switch_sms_template) { boolean isOn = SettingUtil.getSwitchSmsTemplate(); diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java b/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java new file mode 100644 index 00000000..07ea34b6 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.java @@ -0,0 +1,108 @@ +package com.idormy.sms.forwarder.service; + +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.BatteryManager; +import android.os.IBinder; +import android.util.Log; + +import java.text.SimpleDateFormat; + +public class BatteryService extends Service { + + private static final String TAG = "BatteryReceiver"; + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + Log.i(TAG, "onCreate--------------"); + IntentFilter batteryfilter = new IntentFilter(); + batteryfilter.addAction(Intent.ACTION_BATTERY_CHANGED); + registerReceiver(batteryReceiver, batteryfilter); + } + + @Override + public void onStart(Intent intent, int startId) { + super.onStart(intent, startId); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "onStartCommand--------------"); + return Service.START_STICKY; //保证service不被杀死 + } + + @Override + public void onDestroy() { + Log.i(TAG, "onDestroy--------------"); + super.onDestroy(); + this.unregisterReceiver(batteryReceiver); + + } + + // 接收电池信息更新的广播 + private BroadcastReceiver batteryReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Log.i(TAG, "BatteryReceiver--------------"); + String action = intent.getAction(); + Log.i(TAG, " 0 action:" + action); + Log.i(TAG, "ACTION_BATTERY_CHANGED"); + int status = intent.getIntExtra("status", 0); + int health = intent.getIntExtra("health", 0); + boolean present = intent.getBooleanExtra("present", false); + int level = intent.getIntExtra("level", 0); + int scale = intent.getIntExtra("scale", 0); + int icon_small = intent.getIntExtra("icon-small", 0); + int plugged = intent.getIntExtra("plugged", 0); + int voltage = intent.getIntExtra("voltage", 0); + int temperature = intent.getIntExtra("temperature", 0); + String technology = intent.getStringExtra("technology"); + + String statusString = ""; + switch (status) { + case BatteryManager.BATTERY_STATUS_UNKNOWN: + statusString = "unknown"; + break; + case BatteryManager.BATTERY_STATUS_CHARGING: + statusString = "charging"; + break; + case BatteryManager.BATTERY_STATUS_DISCHARGING: + statusString = "discharging"; + break; + case BatteryManager.BATTERY_STATUS_NOT_CHARGING: + statusString = "not charging"; + break; + case BatteryManager.BATTERY_STATUS_FULL: + statusString = "full"; + break; + } + String acString = ""; + + switch (plugged) { + case BatteryManager.BATTERY_PLUGGED_AC: + acString = "plugged ac"; + break; + case BatteryManager.BATTERY_PLUGGED_USB: + acString = "plugged usb"; + break; + } + + SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS "); + String date = sDateFormat.format(new java.util.Date()); + + Log.i(TAG, "battery: date=" + date + ",status " + statusString + + ",level=" + level + ",scale=" + scale + + ",voltage=" + voltage + ",acString=" + acString); + + } + }; +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/FrontService.java b/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java similarity index 51% rename from app/src/main/java/com/idormy/sms/forwarder/FrontService.java rename to app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java index 734e4e1e..0106d453 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/FrontService.java +++ b/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java @@ -1,19 +1,37 @@ -package com.idormy.sms.forwarder; +package com.idormy.sms.forwarder.service; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; +import android.content.ContextWrapper; import android.content.Intent; +import android.content.IntentFilter; +import android.os.BatteryManager; import android.os.Build; import android.os.IBinder; import android.util.Log; +import androidx.annotation.Nullable; + +import com.idormy.sms.forwarder.MainActivity; +import com.idormy.sms.forwarder.MyApplication; +import com.idormy.sms.forwarder.R; +import com.idormy.sms.forwarder.model.LogModel; +import com.idormy.sms.forwarder.model.SenderModel; +import com.idormy.sms.forwarder.model.vo.SmsVo; +import com.idormy.sms.forwarder.sender.SendUtil; +import com.idormy.sms.forwarder.sender.SenderUtil; +import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.OSUtils; import com.idormy.sms.forwarder.utils.PhoneUtils; +import com.idormy.sms.forwarder.utils.SettingUtil; -import androidx.annotation.Nullable; +import java.util.Date; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; public class FrontService extends Service { @@ -66,6 +84,37 @@ public class FrontService extends Service { PhoneUtils.init(this); MyApplication.SimInfoList = PhoneUtils.getSimMultiInfo(); } + + // 低电量预警 + final int[] alarmTimes = {0}; //通知次数,只通知2次 + SenderUtil.init(this); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + int batteryLevel = getBatteryLevel(); + System.out.println("当前剩余电量:" + batteryLevel + "%"); + int batteryLevelAlarm = Integer.parseInt(SettingUtil.getBatteryLevelAlarm()); + System.out.println(alarmTimes[0]); + if (alarmTimes[0] <= 1 && batteryLevelAlarm > 0 && batteryLevelAlarm <= 100 && batteryLevel == batteryLevelAlarm) { + Date date = new Date(); + String msg = "当前剩余电量:" + batteryLevel + "%,已经到达低电量预警阈值,请及时充电!"; + System.out.println(msg); + SmsVo smsVo = new SmsVo("888888", msg, date, ""); + List senderModels = SenderUtil.getSender(null, null); + for (SenderModel senderModel : senderModels + ) { + long ruleId = 0; + long logId = LogUtil.addLog(new LogModel(smsVo.getMobile(), smsVo.getContent(), smsVo.getSimInfo(), ruleId)); + SendUtil.senderSendMsgNoHandError(smsVo, senderModel, logId); + } + alarmTimes[0] = alarmTimes[0] + 1; + } + + if (batteryLevelAlarm > 0 && batteryLevelAlarm <= 100 && batteryLevel > batteryLevelAlarm) { + alarmTimes[0] = 0; + } + } + }, 0, 10000); } @Nullable @@ -77,7 +126,19 @@ public class FrontService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "flags: " + flags + " startId: " + startId); - return START_STICKY; + return START_STICKY; //保证service不被杀死 } + //获取当前电量 + private int getBatteryLevel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + BatteryManager batteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE); + return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); + } else { + Intent intent = new ContextWrapper(getApplicationContext()). + registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + return (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) / + intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + } + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java index 28c97b62..f23c0372 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java @@ -10,6 +10,7 @@ public class Define { public static String SP_MSG_KEY_STRING_ADD_EXTRA_SIM2 = "tsms_msg_key_string_add_extra_sim2"; public static String SP_MSG_KEY_SWITCH_SMS_TEMPLATE = "tsms_msg_key_switch_sms_template"; public static String SP_MSG_KEY_STRING_SMS_TEMPLATE = "tsms_msg_key_string_sms_template"; + public static String SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM = "tsms_msg_key_string_battery_level_alarm"; public static String SP_MSG = "forwarder_msg"; public static String SP_MSG_SET_KEY = "forwarder_msg_set_key"; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java index 2b0da3b3..77da4fd1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java @@ -99,6 +99,18 @@ public class SettingUtil { .apply(); } + public static String getBatteryLevelAlarm() { + String res = sp_setting.getString(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM, ""); + return res; + } + + public static void setBatteryLevelAlarm(String battery_level) { + Log.d(TAG, "battery_level :" + battery_level); + sp_setting.edit() + .putString(Define.SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM, battery_level) + .apply(); + } + public static boolean saveMsgHistory() { return sp_setting.getBoolean("option_save_history_on", false); } diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 2509e80c..2d469efb 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -113,6 +113,46 @@ + + + + + + + + + + + + +