优化铃声设置
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -27,6 +27,11 @@ | ||||
|     <!-- 此应用可显示在其他应用上方 --> | ||||
|     <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 | ||||
|         android:name=".App" | ||||
|         android:allowBackup="true" | ||||
| @@ -88,7 +93,7 @@ | ||||
|         </activity> | ||||
|  | ||||
|         <activity android:name="cc.winboll.studio.contacts.activities.SettingsActivity"/> | ||||
|          | ||||
|  | ||||
|         <service | ||||
|             android:name="cc.winboll.studio.contacts.services.MainService" | ||||
|             android:exported="true"/> | ||||
| @@ -164,7 +169,7 @@ | ||||
|             </intent-filter> | ||||
|  | ||||
|         </receiver> | ||||
|          | ||||
|  | ||||
|         <provider | ||||
|             android:name="androidx.core.content.FileProvider" | ||||
|             android:authorities="${applicationId}.fileprovider" | ||||
|   | ||||
| @@ -4,30 +4,35 @@ package cc.winboll.studio.contacts.activities; | ||||
|  * @Author ZhanGSKen@AliYun.Com | ||||
|  * @Date 2025/02/21 05:37:42 | ||||
|  */ | ||||
| import android.app.NotificationManager; | ||||
| import android.content.Context; | ||||
| import android.content.DialogInterface; | ||||
| import android.content.Intent; | ||||
| import android.media.AudioManager; | ||||
| import android.net.Uri; | ||||
| import android.os.Build; | ||||
| import android.os.Bundle; | ||||
| import android.provider.Settings; | ||||
| import android.view.View; | ||||
| import android.view.WindowManager; | ||||
| import android.widget.Switch; | ||||
| import android.widget.Toast; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| 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 cc.winboll.studio.contacts.R; | ||||
| import cc.winboll.studio.contacts.beans.RingTongBean; | ||||
| import cc.winboll.studio.libappbase.IWinBollActivity; | ||||
| 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 static final String TAG = "SettingsActivity"; | ||||
|  | ||||
|     Toolbar mToolbar; | ||||
|     Switch swSilent; | ||||
|  | ||||
|     @Override | ||||
|     public APPInfo getAppInfo() { | ||||
| @@ -38,7 +43,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv | ||||
|     public AppCompatActivity getActivity() { | ||||
|         return this; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     @Override | ||||
|     public String getTag() { | ||||
|         return TAG; | ||||
| @@ -58,7 +63,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv | ||||
|     public boolean isEnableDisplayHomeAsUp() { | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
| @@ -72,13 +77,13 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv | ||||
|             getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||||
|         } | ||||
|         getSupportActionBar().setSubtitle(getTag()); | ||||
|          | ||||
|     } | ||||
|  | ||||
|     public void onDefaultPhone(View view) { | ||||
|         Intent intent = new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS); | ||||
|         startActivity(intent); | ||||
|     } | ||||
|  | ||||
|     public void onCanDrawOverlays(View view) { | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M | ||||
|             && !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 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); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -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<MainService> mwrService; | ||||
|     // 存储电量指示值, | ||||
|     // 用于校验电量消息时的电量变化 | ||||
|     static volatile int _mnTheQuantityOfElectricityOld = -1; | ||||
|     static volatile boolean _mIsCharging = false; | ||||
|  | ||||
|     public MainReceiver(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.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(); | ||||
|   | ||||
| @@ -18,6 +18,11 @@ | ||||
| 		android:layout_height="0dp" | ||||
| 		android:layout_weight="1.0"> | ||||
|  | ||||
| 		<TextView | ||||
| 			android:layout_width="wrap_content" | ||||
| 			android:layout_height="wrap_content" | ||||
| 			android:text="应用权限设置:"/> | ||||
|  | ||||
| 		<LinearLayout | ||||
| 			android:orientation="horizontal" | ||||
| 			android:layout_width="match_parent" | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen