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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +