diff --git a/contacts/build.properties b/contacts/build.properties index 02ca143..c0d52bb 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #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 libraryProject=winboll-shared baseVersion=1.0 publishVersion=1.0.0 -buildCount=0 +buildCount=32 baseBetaVersion=1.0.1 diff --git a/contacts/src/main/AndroidManifest.xml b/contacts/src/main/AndroidManifest.xml index cd9ce54..36ac1ee 100644 --- a/contacts/src/main/AndroidManifest.xml +++ b/contacts/src/main/AndroidManifest.xml @@ -27,6 +27,11 @@ + + + + + - + @@ -164,7 +169,7 @@ - + = Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java new file mode 100644 index 0000000..792bce4 --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java @@ -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; + } +} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java b/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java index a4d334b..88eb69e 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java @@ -13,22 +13,16 @@ import android.telecom.Call; import android.telecom.InCallService; import androidx.annotation.RequiresApi; 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 java.util.ArrayList; +import cc.winboll.studio.libappbase.LogUtils; @RequiresApi(api = Build.VERSION_CODES.M) public class PhoneCallService extends InCallService { - @Override - public void onCreate() { - super.onCreate(); - - } - - - - private int originalRingVolume; + public static final String TAG = "PhoneCallService"; + + private volatile int originalRingVolume; private final Call.Callback callback = new Call.Callback() { @Override @@ -69,13 +63,24 @@ public class PhoneCallService extends InCallService { // 记录原始铃声音量 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); originalRingVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); + // 检查电话接收规则 if (!Rules.getInstance(this).isAllowed(phoneNumber)) { // 预先静音 audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0); + // 断开电话 call.disconnect(); + // 停顿1秒,预防第一声铃声响动 + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + LogUtils.d(TAG, ""); + } + // 恢复铃声音量 + audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRingVolume, 0); + // 屏蔽电话结束 return; } - + // 正常接听电话 PhoneCallActivity.actionStart(this, phoneNumber, callType); } } diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java index f5da4f6..d1dfb52 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java @@ -9,19 +9,19 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.media.RingtoneManager; +import android.net.Uri; +import android.util.Log; import cc.winboll.studio.contacts.services.MainService; import com.hjq.toast.ToastUtils; import java.lang.ref.WeakReference; +import cc.winboll.studio.libappbase.LogUtils; public class MainReceiver extends BroadcastReceiver { public static final String TAG = "MainReceiver"; public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; WeakReference mwrService; - // 存储电量指示值, - // 用于校验电量消息时的电量变化 - static volatile int _mnTheQuantityOfElectricityOld = -1; - static volatile boolean _mIsCharging = false; public MainReceiver(MainService service) { mwrService = new WeakReference(service); diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java index 643f064..3eef1a4 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java @@ -28,6 +28,8 @@ import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.SOS; import cc.winboll.studio.libappbase.bean.APPSOSBean; import cc.winboll.studio.contacts.dun.Rules; +import android.media.AudioManager; +import com.hjq.toast.ToastUtils; public class MainService extends Service { @@ -46,7 +48,8 @@ public class MainService extends Service { AssistantService mAssistantService; boolean isBound = false; MainReceiver mMainReceiver; - + + @Override public IBinder onBind(Intent intent) { return new MyBinder(); @@ -68,7 +71,9 @@ public class MainService extends Service { mMyServiceConnection = new MyServiceConnection(); } mMainServiceHandler = new MainServiceHandler(this); - + + + // 运行服务内容 mainService(); } @@ -163,6 +168,7 @@ public class MainService extends Service { // 停止主要进程 MainServiceThread.getInstance(this, mMainServiceHandler).setIsExit(true); + } super.onDestroy(); diff --git a/contacts/src/main/res/layout/activity_settings.xml b/contacts/src/main/res/layout/activity_settings.xml index b77a699..2122230 100644 --- a/contacts/src/main/res/layout/activity_settings.xml +++ b/contacts/src/main/res/layout/activity_settings.xml @@ -18,6 +18,11 @@ android:layout_height="0dp" android:layout_weight="1.0"> + +