mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-04 01:47:40 +08:00
转发到其他手机短信
This commit is contained in:
parent
45b782716a
commit
39c9c42938
@ -12,7 +12,7 @@ android {
|
|||||||
}
|
}
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.idormy.sms.forwarder"
|
applicationId "com.idormy.sms.forwarder"
|
||||||
minSdkVersion 21
|
minSdkVersion 23
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode appVersionCode
|
versionCode appVersionCode
|
||||||
versionName appVersionName
|
versionName appVersionName
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="com.idormy.sms.forwarder">
|
package="com.idormy.sms.forwarder">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<!-- 授予应用程序访问系统开机事件的权限 -->
|
<!-- 授予应用程序访问系统开机事件的权限 -->
|
||||||
<uses-permission
|
<uses-permission
|
||||||
|
@ -25,7 +25,9 @@ import com.idormy.sms.forwarder.BroadCastReceiver.SmsForwarderBroadcastReceiver;
|
|||||||
import com.idormy.sms.forwarder.adapter.LogAdapter;
|
import com.idormy.sms.forwarder.adapter.LogAdapter;
|
||||||
import com.idormy.sms.forwarder.model.vo.LogVo;
|
import com.idormy.sms.forwarder.model.vo.LogVo;
|
||||||
import com.idormy.sms.forwarder.utils.LogUtil;
|
import com.idormy.sms.forwarder.utils.LogUtil;
|
||||||
|
import com.idormy.sms.forwarder.utils.NetUtil;
|
||||||
import com.idormy.sms.forwarder.utils.PhoneUtils;
|
import com.idormy.sms.forwarder.utils.PhoneUtils;
|
||||||
|
import com.idormy.sms.forwarder.utils.SmsUtil;
|
||||||
import com.idormy.sms.forwarder.utils.aUtil;
|
import com.idormy.sms.forwarder.utils.aUtil;
|
||||||
import com.umeng.analytics.MobclickAgent;
|
import com.umeng.analytics.MobclickAgent;
|
||||||
|
|
||||||
@ -74,6 +76,9 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
|
|||||||
MyApplication.SimInfoList = PhoneUtils.getSimMultiInfo();
|
MyApplication.SimInfoList = PhoneUtils.getSimMultiInfo();
|
||||||
Log.d(TAG, "SimInfoList = " + MyApplication.SimInfoList);
|
Log.d(TAG, "SimInfoList = " + MyApplication.SimInfoList);
|
||||||
|
|
||||||
|
//短信&网络组件初始化
|
||||||
|
SmsUtil.init(this);
|
||||||
|
NetUtil.init(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,6 +29,7 @@ import com.idormy.sms.forwarder.model.vo.EmailSettingVo;
|
|||||||
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
|
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
|
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
|
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
|
||||||
|
import com.idormy.sms.forwarder.model.vo.SmsSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.TelegramSettingVo;
|
import com.idormy.sms.forwarder.model.vo.TelegramSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
||||||
import com.idormy.sms.forwarder.sender.SenderBarkMsg;
|
import com.idormy.sms.forwarder.sender.SenderBarkMsg;
|
||||||
@ -37,6 +38,7 @@ import com.idormy.sms.forwarder.sender.SenderMailMsg;
|
|||||||
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
|
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
|
||||||
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
|
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
|
||||||
import com.idormy.sms.forwarder.sender.SenderServerChanMsg;
|
import com.idormy.sms.forwarder.sender.SenderServerChanMsg;
|
||||||
|
import com.idormy.sms.forwarder.sender.SenderSmsMsg;
|
||||||
import com.idormy.sms.forwarder.sender.SenderTelegramMsg;
|
import com.idormy.sms.forwarder.sender.SenderTelegramMsg;
|
||||||
import com.idormy.sms.forwarder.sender.SenderUtil;
|
import com.idormy.sms.forwarder.sender.SenderUtil;
|
||||||
import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg;
|
import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg;
|
||||||
@ -54,6 +56,7 @@ import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL;
|
|||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
|
||||||
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SMS;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
|
||||||
|
|
||||||
@ -134,6 +137,9 @@ public class SenderActivity extends AppCompatActivity {
|
|||||||
case TYPE_TELEGRAM:
|
case TYPE_TELEGRAM:
|
||||||
setTelegram(senderModel);
|
setTelegram(senderModel);
|
||||||
break;
|
break;
|
||||||
|
case TYPE_SMS:
|
||||||
|
setSms(senderModel);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show();
|
Toast.makeText(SenderActivity.this, "异常的发送方类型,自动删除!", Toast.LENGTH_LONG).show();
|
||||||
if (senderModel != null) {
|
if (senderModel != null) {
|
||||||
@ -218,6 +224,9 @@ public class SenderActivity extends AppCompatActivity {
|
|||||||
case TYPE_TELEGRAM:
|
case TYPE_TELEGRAM:
|
||||||
setTelegram(null);
|
setTelegram(null);
|
||||||
break;
|
break;
|
||||||
|
case TYPE_SMS:
|
||||||
|
setSms(null);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show();
|
Toast.makeText(SenderActivity.this, "暂不支持这种转发!", Toast.LENGTH_LONG).show();
|
||||||
break;
|
break;
|
||||||
@ -1058,6 +1067,111 @@ public class SenderActivity extends AppCompatActivity {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Sms
|
||||||
|
private void setSms(final SenderModel senderModel) {
|
||||||
|
SmsSettingVo smsSettingVo = null;
|
||||||
|
//try phrase json setting
|
||||||
|
if (senderModel != null) {
|
||||||
|
String jsonSettingStr = senderModel.getJsonSetting();
|
||||||
|
Log.d(TAG, "jsonSettingStr = " + jsonSettingStr);
|
||||||
|
if (jsonSettingStr != null) {
|
||||||
|
smsSettingVo = JSON.parseObject(jsonSettingStr, SmsSettingVo.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final AlertDialog.Builder alertDialog71 = new AlertDialog.Builder(SenderActivity.this);
|
||||||
|
View view1 = View.inflate(SenderActivity.this, R.layout.alert_dialog_setview_sms, null);
|
||||||
|
|
||||||
|
final EditText editTextSmsName = view1.findViewById(R.id.editTextSmsName);
|
||||||
|
if (senderModel != null) editTextSmsName.setText(senderModel.getName());
|
||||||
|
final RadioGroup radioGroupSmsSimSlot = (RadioGroup) view1.findViewById(R.id.radioGroupSmsSimSlot);
|
||||||
|
if (smsSettingVo != null) radioGroupSmsSimSlot.check(smsSettingVo.getSmsSimSlotCheckId());
|
||||||
|
final EditText editTextSmsMobiles = view1.findViewById(R.id.editTextSmsMobiles);
|
||||||
|
if (smsSettingVo != null) editTextSmsMobiles.setText(smsSettingVo.getMobiles());
|
||||||
|
final Switch switchSmsOnlyNoNetwork = view1.findViewById(R.id.switchSmsOnlyNoNetwork);
|
||||||
|
if (smsSettingVo != null) switchSmsOnlyNoNetwork.setChecked(smsSettingVo.getOnlyNoNetwork());
|
||||||
|
|
||||||
|
Button buttonSmsOk = view1.findViewById(R.id.buttonSmsOk);
|
||||||
|
Button buttonSmsDel = view1.findViewById(R.id.buttonSmsDel);
|
||||||
|
Button buttonSmsTest = view1.findViewById(R.id.buttonSmsTest);
|
||||||
|
alertDialog71
|
||||||
|
.setTitle(R.string.setsmstitle)
|
||||||
|
.setIcon(R.mipmap.sms)
|
||||||
|
.setView(view1)
|
||||||
|
.create();
|
||||||
|
final AlertDialog show = alertDialog71.show();
|
||||||
|
|
||||||
|
buttonSmsOk.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
|
||||||
|
if (senderModel == null) {
|
||||||
|
SenderModel newSenderModel = new SenderModel();
|
||||||
|
newSenderModel.setName(editTextSmsName.getText().toString());
|
||||||
|
newSenderModel.setType(TYPE_SMS);
|
||||||
|
newSenderModel.setStatus(STATUS_ON);
|
||||||
|
SmsSettingVo smsSettingVoNew = new SmsSettingVo(
|
||||||
|
newSenderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()),
|
||||||
|
editTextSmsMobiles.getText().toString(),
|
||||||
|
switchSmsOnlyNoNetwork.isChecked()
|
||||||
|
);
|
||||||
|
newSenderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew));
|
||||||
|
SenderUtil.addSender(newSenderModel);
|
||||||
|
initSenders();
|
||||||
|
adapter.add(senderModels);
|
||||||
|
} else {
|
||||||
|
senderModel.setName(editTextSmsName.getText().toString());
|
||||||
|
senderModel.setType(TYPE_SMS);
|
||||||
|
senderModel.setStatus(STATUS_ON);
|
||||||
|
SmsSettingVo smsSettingVoNew = new SmsSettingVo(
|
||||||
|
senderModel.getSmsSimSlotId(radioGroupSmsSimSlot.getCheckedRadioButtonId()),
|
||||||
|
editTextSmsMobiles.getText().toString(),
|
||||||
|
switchSmsOnlyNoNetwork.isChecked()
|
||||||
|
);
|
||||||
|
senderModel.setJsonSetting(JSON.toJSONString(smsSettingVoNew));
|
||||||
|
SenderUtil.updateSender(senderModel);
|
||||||
|
initSenders();
|
||||||
|
adapter.update(senderModels);
|
||||||
|
}
|
||||||
|
|
||||||
|
show.dismiss();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonSmsDel.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
if (senderModel != null) {
|
||||||
|
SenderUtil.delSender(senderModel.getId());
|
||||||
|
initSenders();
|
||||||
|
adapter.del(senderModels);
|
||||||
|
}
|
||||||
|
show.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonSmsTest.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
int simSlot = 0;
|
||||||
|
if (R.id.btnSmsSimSlot2 == radioGroupSmsSimSlot.getCheckedRadioButtonId()) {
|
||||||
|
simSlot = 1;
|
||||||
|
}
|
||||||
|
String mobiles = editTextSmsMobiles.getText().toString();
|
||||||
|
Boolean onlyNoNetwork = switchSmsOnlyNoNetwork.isChecked();
|
||||||
|
if (!mobiles.isEmpty() && !mobiles.isEmpty()) {
|
||||||
|
try {
|
||||||
|
SenderSmsMsg.sendMsg(handler, simSlot, mobiles, onlyNoNetwork, "19999999999", "【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服");
|
||||||
|
} catch (Exception e) {
|
||||||
|
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Toast.makeText(SenderActivity.this, "接收手机号不能为空", Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
Log.d(TAG, "onDestroy");
|
Log.d(TAG, "onDestroy");
|
||||||
|
@ -14,6 +14,7 @@ public class SenderModel {
|
|||||||
public static final int TYPE_QYWX_APP = 5;
|
public static final int TYPE_QYWX_APP = 5;
|
||||||
public static final int TYPE_SERVER_CHAN = 6;
|
public static final int TYPE_SERVER_CHAN = 6;
|
||||||
public static final int TYPE_TELEGRAM = 7;
|
public static final int TYPE_TELEGRAM = 7;
|
||||||
|
public static final int TYPE_SMS = 8;
|
||||||
private Long id;
|
private Long id;
|
||||||
private String name;
|
private String name;
|
||||||
private int status;
|
private int status;
|
||||||
@ -51,6 +52,8 @@ public class SenderModel {
|
|||||||
return R.mipmap.serverchan;
|
return R.mipmap.serverchan;
|
||||||
case (TYPE_TELEGRAM):
|
case (TYPE_TELEGRAM):
|
||||||
return R.mipmap.telegram;
|
return R.mipmap.telegram;
|
||||||
|
case (TYPE_SMS):
|
||||||
|
return R.mipmap.sms;
|
||||||
default:
|
default:
|
||||||
return R.mipmap.sms;
|
return R.mipmap.sms;
|
||||||
}
|
}
|
||||||
@ -128,6 +131,16 @@ public class SenderModel {
|
|||||||
this.time = time;
|
this.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSmsSimSlotId(int id) {
|
||||||
|
if (id == R.id.btnSmsSimSlot1) {
|
||||||
|
return 1;
|
||||||
|
} else if (id == R.id.btnSmsSimSlot2) {
|
||||||
|
return 2;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "SenderModel{" +
|
return "SenderModel{" +
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.idormy.sms.forwarder.model.vo;
|
||||||
|
|
||||||
|
import com.idormy.sms.forwarder.R;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class SmsSettingVo implements Serializable {
|
||||||
|
private int simSlot;
|
||||||
|
private String mobiles;
|
||||||
|
private Boolean onlyNoNetwork;
|
||||||
|
|
||||||
|
public SmsSettingVo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public SmsSettingVo(int simSlot, String mobiles, Boolean onlyNoNetwork) {
|
||||||
|
this.simSlot = simSlot;
|
||||||
|
this.mobiles = mobiles;
|
||||||
|
this.onlyNoNetwork = onlyNoNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSimSlot() {
|
||||||
|
return simSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSimSlot(int simSlot) {
|
||||||
|
this.simSlot = simSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMobiles() {
|
||||||
|
return mobiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMobiles(String mobiles) {
|
||||||
|
this.mobiles = mobiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getOnlyNoNetwork() {
|
||||||
|
return onlyNoNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnlyNoNetwork(Boolean onlyNoNetwork) {
|
||||||
|
this.onlyNoNetwork = onlyNoNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSmsSimSlotCheckId() {
|
||||||
|
if (simSlot == 1) {
|
||||||
|
return R.id.btnSmsSimSlot1;
|
||||||
|
} else if (simSlot == 2) {
|
||||||
|
return R.id.btnSmsSimSlot2;
|
||||||
|
} else {
|
||||||
|
return R.id.btnSmsSimSlotOrg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -14,10 +14,12 @@ import com.idormy.sms.forwarder.model.vo.EmailSettingVo;
|
|||||||
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
|
import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
|
import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
|
import com.idormy.sms.forwarder.model.vo.ServerChanSettingVo;
|
||||||
|
import com.idormy.sms.forwarder.model.vo.SmsSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.TelegramSettingVo;
|
import com.idormy.sms.forwarder.model.vo.TelegramSettingVo;
|
||||||
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
||||||
import com.idormy.sms.forwarder.utils.LogUtil;
|
import com.idormy.sms.forwarder.utils.LogUtil;
|
||||||
|
import com.idormy.sms.forwarder.utils.NetUtil;
|
||||||
import com.idormy.sms.forwarder.utils.RuleUtil;
|
import com.idormy.sms.forwarder.utils.RuleUtil;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -28,6 +30,7 @@ import static com.idormy.sms.forwarder.model.SenderModel.TYPE_EMAIL;
|
|||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_APP;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_QYWX_GROUP_ROBOT;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SERVER_CHAN;
|
||||||
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_SMS;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_TELEGRAM;
|
||||||
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
|
import static com.idormy.sms.forwarder.model.SenderModel.TYPE_WEB_NOTIFY;
|
||||||
|
|
||||||
@ -57,7 +60,7 @@ public class SendUtil {
|
|||||||
List<SenderModel> senderModels = SenderUtil.getSender(ruleModel.getSenderId(), null);
|
List<SenderModel> senderModels = SenderUtil.getSender(ruleModel.getSenderId(), null);
|
||||||
for (SenderModel senderModel : senderModels
|
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);
|
SendUtil.senderSendMsgNoHandError(smsVo, senderModel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,6 +219,30 @@ public class SendUtil {
|
|||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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<String> divideContents = smsManager.divideMessage(message);
|
||||||
|
for (String text : divideContents) {
|
||||||
|
smsManager.sendTextMessage(mobiles, null, text, sendPI, deliverPI);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
146
app/src/main/res/layout/alert_dialog_setview_sms.xml
Normal file
146
app/src/main/res/layout/alert_dialog_setview_sms.xml
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="设置名称" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/editTextSmsName"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="3dp"
|
||||||
|
android:ems="14"
|
||||||
|
android:inputType=""
|
||||||
|
android:text="" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
android:text="发送卡槽" />
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/radioGroupSmsSimSlot"
|
||||||
|
style="@style/rg_style"
|
||||||
|
android:layout_marginLeft="3dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/btnSmsSimSlotOrg"
|
||||||
|
style="@style/rg_rb_style"
|
||||||
|
android:checked="true"
|
||||||
|
android:text="原进原出" />
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/btnSmsSimSlot1"
|
||||||
|
style="@style/rg_rb_style"
|
||||||
|
android:text="SIM1" />
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/btnSmsSimSlot2"
|
||||||
|
style="@style/rg_rb_style"
|
||||||
|
android:text="SIM2" />
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="接收手机,多个号码以半角分号分隔,例如:15888888888;19999999999" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/editTextSmsMobiles"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="3dp"
|
||||||
|
android:ems="14"
|
||||||
|
android:text="" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="仅当无网络时启用" />
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/switchSmsOnlyNoNetwork"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="false"
|
||||||
|
android:ems="14" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/buttonSmsOk"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/ok" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/buttonSmsDel"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/del" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/buttonSmsTest"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/test" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
@ -9,5 +9,6 @@
|
|||||||
<item>转发到企业微信应用消息</item>
|
<item>转发到企业微信应用消息</item>
|
||||||
<item>转发到Server酱·Turbo版</item>
|
<item>转发到Server酱·Turbo版</item>
|
||||||
<item>转发到Telegram机器人</item>
|
<item>转发到Telegram机器人</item>
|
||||||
|
<item>转发到其他手机短信</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
</resources>
|
</resources>
|
@ -14,6 +14,7 @@
|
|||||||
<string name="setbarktitle">设置Bark</string>
|
<string name="setbarktitle">设置Bark</string>
|
||||||
<string name="setserverchantitle">设置Server酱·Turbo版</string>
|
<string name="setserverchantitle">设置Server酱·Turbo版</string>
|
||||||
<string name="settelegramtitle">设置Telegram机器人</string>
|
<string name="settelegramtitle">设置Telegram机器人</string>
|
||||||
|
<string name="setsmstitle">设置SMS</string>
|
||||||
<string name="check_new_version">检查更新</string>
|
<string name="check_new_version">检查更新</string>
|
||||||
<string name="to_setting">设置</string>
|
<string name="to_setting">设置</string>
|
||||||
<string name="to_about">关于</string>
|
<string name="to_about">关于</string>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
ext {
|
ext {
|
||||||
appVersionCode = 20
|
appVersionCode = 21
|
||||||
appVersionName = "1.6.4"
|
appVersionName = "1.7.0"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user