diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1c85667a..1e7ce2bf 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -156,6 +156,11 @@
+
{
+ SettingUtil.switchPlaySilenceMusic(isChecked);
+
+ if (isChecked) {
+ startService(new Intent(context, MusicService.class));
+ } else {
+ stopService(new Intent(context, MusicService.class));
+ }
+ Log.d(TAG, "onCheckedChanged:" + isChecked);
+ });
+ }
+
//接口请求失败重试时间间隔
private void editRetryDelayTime(final EditText et_retry_times, final EditText et_delay_time) {
et_retry_times.setText(String.valueOf(SettingUtil.getRetryTimes()));
@@ -945,4 +968,48 @@ public class SettingActivity extends AppCompatActivity {
return super.onMenuOpened(featureId, menu);
}
+ /**
+ * 获取当前手机品牌
+ *
+ * @return 手机品牌
+ */
+ public static String getAutoStartTips() {
+ String brand = Build.BRAND.toLowerCase();
+ String tips;
+
+ switch (brand) {
+ case "huawei":
+ tips = "华为手机:应用启动管理 -> 关闭应用开关 -> 打开允许自启动";
+ break;
+ case "honor":
+ tips = "荣耀手机:应用启动管理 -> 关闭应用开关 -> 打开允许自启动";
+ break;
+ case "xiaomi":
+ tips = "小米手机:授权管理 -> 自启动管理 -> 允许应用自启动";
+ break;
+ case "oppo":
+ tips = "OPPO手机:权限隐私 -> 自启动管理 -> 允许应用自启动";
+ break;
+ case "vivo":
+ tips = "vivo手机:权限管理 -> 自启动 -> 允许应用自启动";
+ break;
+ case "meizu":
+ tips = "魅族手机:权限管理 -> 后台管理 -> 点击应用 -> 允许后台运行";
+ break;
+ case "samsung":
+ tips = "三星手机:自动运行应用程序 -> 打开应用开关 -> 电池管理 -> 未监视的应用程序 -> 添加应用";
+ break;
+ case "letv":
+ tips = "乐视手机:自启动管理 -> 允许应用自启动";
+ break;
+ case "smartisan":
+ tips = "锤子手机:权限管理 -> 自启动权限管理 -> 点击应用 -> 允许被系统启动";
+ break;
+ default:
+ tips = "未知手机品牌:需要自主查看设置操作";
+ break;
+ }
+
+ return tips;
+ }
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java
index 88acd49e..508ce591 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java
+++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/RebootBroadcastReceiver.java
@@ -8,7 +8,9 @@ import android.util.Log;
import com.idormy.sms.forwarder.service.BatteryService;
import com.idormy.sms.forwarder.service.FrontService;
+import com.idormy.sms.forwarder.service.MusicService;
import com.idormy.sms.forwarder.utils.InitUtil;
+import com.idormy.sms.forwarder.utils.SettingUtil;
public class RebootBroadcastReceiver extends BroadcastReceiver {
@@ -31,6 +33,11 @@ public class RebootBroadcastReceiver extends BroadcastReceiver {
//电池状态监听
Intent batteryServiceIntent = new Intent(context, BatteryService.class);
context.startService(batteryServiceIntent);
+
+ //后台播放无声音乐
+ if (SettingUtil.getPlaySilenceMusic()) {
+ context.startService(new Intent(context, MusicService.class));
+ }
}
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/MusicService.java b/app/src/main/java/com/idormy/sms/forwarder/service/MusicService.java
new file mode 100644
index 00000000..1a88abf8
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/service/MusicService.java
@@ -0,0 +1,95 @@
+package com.idormy.sms.forwarder.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.IBinder;
+import android.util.Log;
+
+import com.idormy.sms.forwarder.R;
+
+public class MusicService extends Service {
+
+ private final String TAG = "MusicService";
+
+ private MediaPlayer mMediaPlayer;
+
+ private AudioManager mAudioManager;
+
+ private final AudioManager.OnAudioFocusChangeListener mAudioFocusChange = new
+ AudioManager.OnAudioFocusChangeListener() {
+ @Override
+ public void onAudioFocusChange(int focusChange) {
+ switch (focusChange) {
+ case AudioManager.AUDIOFOCUS_GAIN:
+ Log.e(TAG, "AUDIOFOCUS_GAIN");
+ try {
+ startPlayMusic();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ break;
+ case AudioManager.AUDIOFOCUS_LOSS:
+ Log.e(TAG, "AUDIOFOCUS_LOSS");
+ mAudioManager.abandonAudioFocus(mAudioFocusChange);
+ break;
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
+ Log.e(TAG, "AUDIOFOCUS_LOSS_TRANSIENT");
+ break;
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
+ Log.e(TAG, "AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
+ break;
+ }
+ }
+ };
+
+ public MusicService() {
+
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ // TODO: Return the communication channel to the service.
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ //音标处理
+ mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
+ if (mAudioManager != null)
+ mAudioManager.requestAudioFocus(mAudioFocusChange, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
+
+ mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.silence);
+ mMediaPlayer.setLooping(true);
+
+ startPlayMusic();
+
+ return START_STICKY;
+ }
+
+
+ private void startPlayMusic() {
+ if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
+ Log.e(TAG, "启动后台播放音乐");
+ mMediaPlayer.start();
+ }
+ }
+
+ private void stopPlayMusic() {
+ if (mMediaPlayer != null) {
+ Log.e(TAG, "关闭后台播放音乐");
+ mMediaPlayer.stop();
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ stopPlayMusic();
+ Log.e(TAG, TAG + "---->onDestroy,停止服务");
+ }
+
+}
+
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 0fbbd9d8..b1d8095c 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
@@ -11,6 +11,7 @@ public class Define {
public static final String SP_MSG_KEY_STRING_ENABLE_APP_NOTIFY = "tsms_msg_key_switch_enable_app_notify";
public static final String SP_MSG_KEY_STRING_CANCEL_APP_NOTIFY = "tsms_msg_key_switch_cancel_app_notify";
public static final String SP_MSG_KEY_STRING_ENABLE_EXCLUDE_FROM_RECENTS = "tsms_msg_key_switch_enable_exclude_from_recents";
+ public static final String SP_MSG_KEY_STRING_ENABLE_PLAY_SILENCE_MUSIC = "tsms_msg_key_switch_enable_play_silence_music";
public static final String SP_MSG_KEY_STRING_ADD_EXTRA_DEVICE_MARK = "tsms_msg_key_string_add_extra_device_mark";
public static final String SP_MSG_KEY_STRING_ADD_EXTRA_SIM1 = "tsms_msg_key_string_add_extra_sim1";
public static final String SP_MSG_KEY_STRING_ADD_EXTRA_SIM2 = "tsms_msg_key_string_add_extra_sim2";
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 28055786..cc62b03a 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
@@ -93,6 +93,14 @@ public class SettingUtil {
return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_EXCLUDE_FROM_RECENTS, false);
}
+ public static void switchPlaySilenceMusic(Boolean enable) {
+ sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_PLAY_SILENCE_MUSIC, enable).apply();
+ }
+
+ public static boolean getPlaySilenceMusic() {
+ return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_PLAY_SILENCE_MUSIC, false);
+ }
+
public static void switchSmsTemplate(Boolean switchSmsTemplate) {
sp_setting.edit().putBoolean(Define.SP_MSG_KEY_SWITCH_SMS_TEMPLATE, switchSmsTemplate).apply();
}
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
index 9e9db791..e03816d1 100644
--- a/app/src/main/res/layout/activity_setting.xml
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -544,12 +544,26 @@
android:orientation="horizontal"
android:padding="15dp">
-
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
被永久拒绝授权,请前往系统设置手动授予权限!
获取必需的权限失败,APP功能可能受限!
\n 首次使用请按照1234步骤顺序设置,数字点亮表示该步骤已设置(4点亮表示有成功日志)!\n\n 根据以往用户反馈,90%的新用户最终排查结果都是手机权限设置问题,5%的用户是APP保活问题,其他问题排查参考Wiki中的常见问题(APP右上角使用帮助入口)\n\n 强烈建议:手动排查一下系统设置:自启动、电源策略、APP的权限,把所有权限打开(始终允许,不要“使用中允许”,MIUI系统就全部变绿),特别是一些国产定制系统加入隐私保护、验证码保护等(例如:MIUI 系统的 空白通行证)\n\n 请选择是否立即“前往系统设置”检查,或“稍后自行处理”?
+ Play silent music in the background
+ Play silent music to keep running in the background, which may consume more power, enable it on demand
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6fb0f29f..9619b676 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -327,7 +327,7 @@
电池监控
【注意】需要手动创建APP转发规则,包名:88888888
保活措施
- 建议开启每一项授权或设置,不要禁用通知栏,避免APP被杀
+ 建议开启前三项授权或设置,不要禁用通知栏,避免APP被杀
个性设置
如果自动获取失败,请手动填写备注 或 清空后再次自动获取
次
@@ -433,4 +433,6 @@
被永久拒绝授权,请前往系统设置手动授予权限!
获取必需的权限失败,APP功能可能受限!
\n 首次使用请按照1234步骤顺序设置,数字点亮表示该步骤已设置(4点亮表示有成功日志)!\n\n 根据以往用户反馈,90%的新用户最终排查结果都是手机权限设置问题,5%的用户是APP保活问题,其他问题排查参考Wiki中的常见问题(APP右上角使用帮助入口)\n\n 强烈建议:手动排查一下系统设置:自启动、电源策略、APP的权限,把所有权限打开(始终允许,不要“使用中允许”,MIUI系统就全部变绿),特别是一些国产定制系统加入隐私保护、验证码保护等(例如:MIUI 系统的 空白通行证)\n\n 请选择是否立即“前往系统设置”检查,或“稍后自行处理”?
+ 后台播放无声音乐
+ 播放无声音乐让后台一直运行,可能比较耗电,按需启用