From 39c9c42938de170ff72ae4bb46d4caf47d3b172a Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Thu, 18 Mar 2021 17:05:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E5=8F=91=E5=88=B0=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 1 + .../idormy/sms/forwarder/MainActivity.java | 5 + .../idormy/sms/forwarder/SenderActivity.java | 114 ++++++++++++++ .../sms/forwarder/model/SenderModel.java | 13 ++ .../sms/forwarder/model/vo/SmsSettingVo.java | 54 +++++++ .../idormy/sms/forwarder/sender/SendUtil.java | 29 +++- .../sms/forwarder/sender/SenderSmsMsg.java | 21 +++ .../idormy/sms/forwarder/utils/NetUtil.java | 55 +++++++ .../idormy/sms/forwarder/utils/SmsUtil.java | 43 ++++++ .../res/layout/alert_dialog_setview_sms.xml | 146 ++++++++++++++++++ app/src/main/res/values/array.xml | 1 + app/src/main/res/values/strings.xml | 1 + app/version.gradle | 4 +- 14 files changed, 485 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/model/vo/SmsSettingVo.java create mode 100644 app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java create mode 100644 app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java create mode 100644 app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java create mode 100644 app/src/main/res/layout/alert_dialog_setview_sms.xml diff --git a/app/build.gradle b/app/build.gradle index 15645211..cec1ae15 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { } defaultConfig { applicationId "com.idormy.sms.forwarder" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 29 versionCode appVersionCode versionName appVersionName diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9bed9a2c..870002e9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" package="com.idormy.sms.forwarder"> + senderModels = SenderUtil.getSender(ruleModel.getSenderId(), null); for (SenderModel senderModel : senderModels ) { - LogUtil.addLog(new LogModel(smsVo.getMobile(), smsVo.getContent(), smsVo.getSimInfo(), senderModel.getId())); + LogUtil.addLog(new LogModel(smsVo.getMobile(), smsVo.getContent(), smsVo.getSimInfo(), ruleModel.getId())); SendUtil.senderSendMsgNoHandError(smsVo, senderModel); } } @@ -216,6 +219,30 @@ public class SendUtil { } break; + case TYPE_SMS: + //try phrase json setting + if (senderModel.getJsonSetting() != null) { + SmsSettingVo smsSettingVo = JSON.parseObject(senderModel.getJsonSetting(), SmsSettingVo.class); + if (smsSettingVo != null) { + //仅当无网络时启用 + if (true == smsSettingVo.getOnlyNoNetwork() && 0 != NetUtil.getNetWorkStatus()) { + Log.d(TAG, "仅当无网络时启用,当前网络状态:" + NetUtil.getNetWorkStatus()); + return; + } + try { + int simSlot = smsSettingVo.getSimSlot() - 1; + if (simSlot < 0) { //原进原出 + simSlot = Integer.parseInt(smsVo.getSimInfo().substring(3, 4)) - 1; + Log.d(TAG, "simSlot = " + simSlot); + } + SenderSmsMsg.sendMsg(handError, simSlot, smsSettingVo.getMobiles(), smsSettingVo.getOnlyNoNetwork(), smsVo.getMobile(), smsVo.getSmsVoForSend()); + } catch (Exception e) { + Log.e(TAG, "senderSendMsg: SenderSmsMsg error " + e.getMessage()); + } + } + } + break; + default: break; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java new file mode 100644 index 00000000..c2850675 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java @@ -0,0 +1,21 @@ +package com.idormy.sms.forwarder.sender; + +import android.os.Handler; +import android.util.Log; + +import com.idormy.sms.forwarder.utils.SimUtil; +import com.idormy.sms.forwarder.utils.SmsUtil; + +public class SenderSmsMsg { + + static String TAG = "SenderSmsMsg"; + + public static void sendMsg(final Handler handError, int simSlot, String mobiles, Boolean onlyNoNetwork, String from, String text) throws Exception { + Log.i(TAG, "sendMsg simSlot:" + simSlot + " mobiles:" + mobiles + " onlyNoNetwork:" + onlyNoNetwork + " from:" + from + " text:" + text); + + //TODO:simSlot转subId + int subId = SimUtil.getSubscriptionIdBySimId(simSlot); + SmsUtil.sendSms(subId, mobiles, text); + } + +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java new file mode 100644 index 00000000..082a6663 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/NetUtil.java @@ -0,0 +1,55 @@ +package com.idormy.sms.forwarder.utils; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.widget.Toast; + +public class NetUtil { + //没有网络 + private static final int NETWORK_NONE = 0; + //移动网络 + private static final int NETWORK_MOBILE = 1; + //无线网络 + private static final int NETWORW_WIFI = 2; + + static Boolean hasInit = false; + static Context context; + + + public static void init(Context context1) { + synchronized (hasInit) { + if (hasInit) return; + hasInit = true; + context = context1; + } + } + + //获取网络启动 + public static int getNetWorkStatus() { + //连接服务 CONNECTIVITY_SERVICE + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + //网络信息 NetworkInfo + NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + + if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { + //判断是否是wifi + if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) { + //返回无线网络 + Toast.makeText(context, "当前处于无线网络", Toast.LENGTH_SHORT).show(); + return NETWORW_WIFI; + //判断是否移动网络 + } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) { + Toast.makeText(context, "当前处于移动网络", Toast.LENGTH_SHORT).show(); + //返回移动网络 + return NETWORK_MOBILE; + } + } else { + //没有网络 + Toast.makeText(context, "当前没有网络", Toast.LENGTH_SHORT).show(); + return NETWORK_NONE; + } + //默认返回 没有网络 + return NETWORK_NONE; + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java new file mode 100644 index 00000000..fd344f50 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SmsUtil.java @@ -0,0 +1,43 @@ +package com.idormy.sms.forwarder.utils; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.telephony.SmsManager; +import android.util.Log; + +import java.util.List; + +public class SmsUtil { + static String TAG = "SmsUtil"; + static Boolean hasInit = false; + static Context context; + + + public static void init(Context context1) { + synchronized (hasInit) { + if (hasInit) return; + hasInit = true; + context = context1; + } + } + + public static void sendSms(int subId, String mobiles, String message) { + mobiles = mobiles.replace(";", ";"); + Log.d(TAG, "subId = " + subId + ", mobiles = " + mobiles + ", message = " + message); + + try { + SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(subId); + PendingIntent sendPI = PendingIntent.getBroadcast(context, 0, new Intent(Context.TELEPHONY_SUBSCRIPTION_SERVICE), PendingIntent.FLAG_ONE_SHOT); + PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, new Intent("DELIVERED_SMS_ACTION"), 0); + + List divideContents = smsManager.divideMessage(message); + for (String text : divideContents) { + smsManager.sendTextMessage(mobiles, null, text, sendPI, deliverPI); + } + } catch (Exception e) { + Log.e(TAG, e.getMessage()); + } + } + +} diff --git a/app/src/main/res/layout/alert_dialog_setview_sms.xml b/app/src/main/res/layout/alert_dialog_setview_sms.xml new file mode 100644 index 00000000..64754bff --- /dev/null +++ b/app/src/main/res/layout/alert_dialog_setview_sms.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +