优化铃声设置
This commit is contained in:
parent
63c10e6dc9
commit
2cc3850c95
@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Fri Feb 21 12:18:00 HKT 2025
|
#Mon Feb 24 16:11:50 GMT 2025
|
||||||
stageCount=1
|
stageCount=1
|
||||||
libraryProject=winboll-shared
|
libraryProject=winboll-shared
|
||||||
baseVersion=1.0
|
baseVersion=1.0
|
||||||
publishVersion=1.0.0
|
publishVersion=1.0.0
|
||||||
buildCount=0
|
buildCount=32
|
||||||
baseBetaVersion=1.0.1
|
baseBetaVersion=1.0.1
|
||||||
|
@ -27,6 +27,11 @@
|
|||||||
<!-- 此应用可显示在其他应用上方 -->
|
<!-- 此应用可显示在其他应用上方 -->
|
||||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||||
|
|
||||||
|
<!-- 更改您的音频设置 -->
|
||||||
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".App"
|
android:name=".App"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -4,30 +4,35 @@ package cc.winboll.studio.contacts.activities;
|
|||||||
* @Author ZhanGSKen@AliYun.Com
|
* @Author ZhanGSKen@AliYun.Com
|
||||||
* @Date 2025/02/21 05:37:42
|
* @Date 2025/02/21 05:37:42
|
||||||
*/
|
*/
|
||||||
|
import android.app.NotificationManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
import android.widget.Switch;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import cc.winboll.studio.contacts.R;
|
|
||||||
import com.hjq.toast.ToastUtils;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import cc.winboll.studio.contacts.R;
|
||||||
|
import cc.winboll.studio.contacts.beans.RingTongBean;
|
||||||
import cc.winboll.studio.libappbase.IWinBollActivity;
|
import cc.winboll.studio.libappbase.IWinBollActivity;
|
||||||
import cc.winboll.studio.libappbase.bean.APPInfo;
|
import cc.winboll.studio.libappbase.bean.APPInfo;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
public class SettingsActivity extends AppCompatActivity implements IWinBollActivity {
|
public class SettingsActivity extends AppCompatActivity implements IWinBollActivity {
|
||||||
|
|
||||||
public static final String TAG = "SettingsActivity";
|
public static final String TAG = "SettingsActivity";
|
||||||
|
|
||||||
Toolbar mToolbar;
|
Toolbar mToolbar;
|
||||||
|
Switch swSilent;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APPInfo getAppInfo() {
|
public APPInfo getAppInfo() {
|
||||||
@ -72,13 +77,13 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
}
|
}
|
||||||
getSupportActionBar().setSubtitle(getTag());
|
getSupportActionBar().setSubtitle(getTag());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDefaultPhone(View view) {
|
public void onDefaultPhone(View view) {
|
||||||
Intent intent = new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS);
|
Intent intent = new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCanDrawOverlays(View view) {
|
public void onCanDrawOverlays(View view) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
||||||
&& !Settings.canDrawOverlays(this)) {
|
&& !Settings.canDrawOverlays(this)) {
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
package cc.winboll.studio.contacts.beans;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ZhanGSKen@AliYun.Com
|
||||||
|
* @Date 2025/02/24 18:47:11
|
||||||
|
* @Describe 手机铃声设置参数类
|
||||||
|
*/
|
||||||
|
import cc.winboll.studio.libappbase.BaseBean;
|
||||||
|
import android.util.JsonWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import android.media.AudioManager;
|
||||||
|
import android.util.JsonReader;
|
||||||
|
|
||||||
|
public class RingTongBean extends BaseBean {
|
||||||
|
|
||||||
|
public static final String TAG = "AudioRingTongBean";
|
||||||
|
|
||||||
|
// 模式
|
||||||
|
int ringerMode;
|
||||||
|
|
||||||
|
public RingTongBean() {
|
||||||
|
this.ringerMode = AudioManager.RINGER_MODE_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RingTongBean(int ringerMode) {
|
||||||
|
this.ringerMode = ringerMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRingerMode(int ringerMode) {
|
||||||
|
this.ringerMode = ringerMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRingerMode() {
|
||||||
|
return ringerMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return RingTongBean.class.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
|
||||||
|
super.writeThisToJsonWriter(jsonWriter);
|
||||||
|
jsonWriter.name("ringerMode").value(getRingerMode());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
|
||||||
|
if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
|
||||||
|
if (name.equals("ringerMode")) {
|
||||||
|
setRingerMode(jsonReader.nextInt());
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
|
||||||
|
jsonReader.beginObject();
|
||||||
|
while (jsonReader.hasNext()) {
|
||||||
|
String name = jsonReader.nextName();
|
||||||
|
if (!initObjectsFromJsonReader(jsonReader, name)) {
|
||||||
|
jsonReader.skipValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 结束 JSON 对象
|
||||||
|
jsonReader.endObject();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -13,22 +13,16 @@ import android.telecom.Call;
|
|||||||
import android.telecom.InCallService;
|
import android.telecom.InCallService;
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import cc.winboll.studio.contacts.ActivityStack;
|
import cc.winboll.studio.contacts.ActivityStack;
|
||||||
import cc.winboll.studio.contacts.beans.PhoneBlackRuleBean;
|
import cc.winboll.studio.contacts.beans.RingTongBean;
|
||||||
import cc.winboll.studio.contacts.dun.Rules;
|
import cc.winboll.studio.contacts.dun.Rules;
|
||||||
import java.util.ArrayList;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
public class PhoneCallService extends InCallService {
|
public class PhoneCallService extends InCallService {
|
||||||
|
|
||||||
@Override
|
public static final String TAG = "PhoneCallService";
|
||||||
public void onCreate() {
|
|
||||||
super.onCreate();
|
|
||||||
|
|
||||||
}
|
private volatile int originalRingVolume;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private int originalRingVolume;
|
|
||||||
|
|
||||||
private final Call.Callback callback = new Call.Callback() {
|
private final Call.Callback callback = new Call.Callback() {
|
||||||
@Override
|
@Override
|
||||||
@ -69,13 +63,24 @@ public class PhoneCallService extends InCallService {
|
|||||||
// 记录原始铃声音量
|
// 记录原始铃声音量
|
||||||
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
|
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
|
||||||
originalRingVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING);
|
originalRingVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING);
|
||||||
|
// 检查电话接收规则
|
||||||
if (!Rules.getInstance(this).isAllowed(phoneNumber)) {
|
if (!Rules.getInstance(this).isAllowed(phoneNumber)) {
|
||||||
// 预先静音
|
// 预先静音
|
||||||
audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
|
audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
|
||||||
|
// 断开电话
|
||||||
call.disconnect();
|
call.disconnect();
|
||||||
|
// 停顿1秒,预防第一声铃声响动
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
LogUtils.d(TAG, "");
|
||||||
|
}
|
||||||
|
// 恢复铃声音量
|
||||||
|
audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRingVolume, 0);
|
||||||
|
// 屏蔽电话结束
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 正常接听电话
|
||||||
PhoneCallActivity.actionStart(this, phoneNumber, callType);
|
PhoneCallActivity.actionStart(this, phoneNumber, callType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,19 +9,19 @@ import android.content.BroadcastReceiver;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.media.RingtoneManager;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.util.Log;
|
||||||
import cc.winboll.studio.contacts.services.MainService;
|
import cc.winboll.studio.contacts.services.MainService;
|
||||||
import com.hjq.toast.ToastUtils;
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
|
||||||
public class MainReceiver extends BroadcastReceiver {
|
public class MainReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
public static final String TAG = "MainReceiver";
|
public static final String TAG = "MainReceiver";
|
||||||
public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
|
public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
|
||||||
WeakReference<MainService> mwrService;
|
WeakReference<MainService> mwrService;
|
||||||
// 存储电量指示值,
|
|
||||||
// 用于校验电量消息时的电量变化
|
|
||||||
static volatile int _mnTheQuantityOfElectricityOld = -1;
|
|
||||||
static volatile boolean _mIsCharging = false;
|
|
||||||
|
|
||||||
public MainReceiver(MainService service) {
|
public MainReceiver(MainService service) {
|
||||||
mwrService = new WeakReference<MainService>(service);
|
mwrService = new WeakReference<MainService>(service);
|
||||||
|
@ -28,6 +28,8 @@ import cc.winboll.studio.libappbase.LogUtils;
|
|||||||
import cc.winboll.studio.libappbase.SOS;
|
import cc.winboll.studio.libappbase.SOS;
|
||||||
import cc.winboll.studio.libappbase.bean.APPSOSBean;
|
import cc.winboll.studio.libappbase.bean.APPSOSBean;
|
||||||
import cc.winboll.studio.contacts.dun.Rules;
|
import cc.winboll.studio.contacts.dun.Rules;
|
||||||
|
import android.media.AudioManager;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
|
|
||||||
public class MainService extends Service {
|
public class MainService extends Service {
|
||||||
|
|
||||||
@ -47,6 +49,7 @@ public class MainService extends Service {
|
|||||||
boolean isBound = false;
|
boolean isBound = false;
|
||||||
MainReceiver mMainReceiver;
|
MainReceiver mMainReceiver;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent intent) {
|
public IBinder onBind(Intent intent) {
|
||||||
return new MyBinder();
|
return new MyBinder();
|
||||||
@ -69,6 +72,8 @@ public class MainService extends Service {
|
|||||||
}
|
}
|
||||||
mMainServiceHandler = new MainServiceHandler(this);
|
mMainServiceHandler = new MainServiceHandler(this);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 运行服务内容
|
// 运行服务内容
|
||||||
mainService();
|
mainService();
|
||||||
}
|
}
|
||||||
@ -163,6 +168,7 @@ public class MainService extends Service {
|
|||||||
|
|
||||||
// 停止主要进程
|
// 停止主要进程
|
||||||
MainServiceThread.getInstance(this, mMainServiceHandler).setIsExit(true);
|
MainServiceThread.getInstance(this, mMainServiceHandler).setIsExit(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
@ -18,6 +18,11 @@
|
|||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1.0">
|
android:layout_weight="1.0">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="应用权限设置:"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Fri Feb 21 12:18:00 HKT 2025
|
#Mon Feb 24 16:11:50 GMT 2025
|
||||||
stageCount=1
|
stageCount=1
|
||||||
libraryProject=winboll-shared
|
libraryProject=winboll-shared
|
||||||
baseVersion=1.0
|
baseVersion=1.0
|
||||||
publishVersion=1.0.0
|
publishVersion=1.0.0
|
||||||
buildCount=0
|
buildCount=32
|
||||||
baseBetaVersion=1.0.1
|
baseBetaVersion=1.0.1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user