短信模板增加卡槽标识(SIM1:188xxxxxxxx 或 SIMx:unknown)

This commit is contained in:
pppscn 2021-03-02 00:20:04 +08:00
parent 562b1dba1a
commit 01229af3fb
11 changed files with 98 additions and 32 deletions

View File

@ -78,6 +78,8 @@ Android手机监听短信并根据指定规则转发到其他手机、钉钉机
## 更新记录: ## 更新记录:
> [v1.2.2](app/release/SmsForwarder_release_20210302_1.2.2.apk) 【预发布】短信模板增加卡槽标识SIM1188xxxxxxxx 或 SIMxunknown
> [v1.2.1](app/release/SmsForwarder_release_20210226_1.2.1.apk) 修复bark-server升级到2.0后的兼容性问题 > [v1.2.1](app/release/SmsForwarder_release_20210226_1.2.1.apk) 修复bark-server升级到2.0后的兼容性问题
> [v1.2.0](app/release/SmsForwarder_release_20210219_1.2.0.apk) 重写SMTP邮件发送推荐升级 > [v1.2.0](app/release/SmsForwarder_release_20210219_1.2.0.apk) 重写SMTP邮件发送推荐升级

View File

@ -14,8 +14,8 @@ android {
applicationId "com.idormy.sms.forwarder" applicationId "com.idormy.sms.forwarder"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 28 targetSdkVersion 28
versionCode 7 versionCode 8
versionName "1.2.1" versionName "1.2.2"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
} }
buildTypes { buildTypes {
@ -24,7 +24,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
} }
buildToolsVersion '28.0.3' buildToolsVersion '29.0.2'
//apk file name //apk file name
android.applicationVariants.all { variant -> android.applicationVariants.all { variant ->
variant.outputs.all { variant.outputs.all {

Binary file not shown.

View File

@ -10,9 +10,9 @@
{ {
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"versionCode": 7, "versionCode": 8,
"versionName": "1.2.1", "versionName": "1.2.2",
"outputFile": "SmsForwarder_release_20210226_1.2.1.apk" "outputFile": "SmsForwarder_release_20210302_1.2.2.apk"
} }
] ]
} }

View File

@ -3,9 +3,11 @@ package com.idormy.sms.forwarder.BroadCastReceiver;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage; import android.telephony.SmsMessage;
import android.util.Log; import android.util.Log;
import com.idormy.sms.forwarder.MyApplication;
import com.idormy.sms.forwarder.model.vo.SmsVo; import com.idormy.sms.forwarder.model.vo.SmsVo;
import com.idormy.sms.forwarder.utils.SendUtil; import com.idormy.sms.forwarder.utils.SendUtil;
@ -26,8 +28,21 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
if (receiveAction.equals("android.provider.Telephony.SMS_RECEIVED")) { if (receiveAction.equals("android.provider.Telephony.SMS_RECEIVED")) {
try { try {
Object[] object = (Object[]) Objects.requireNonNull(intent.getExtras()).get("pdus"); Bundle extras = intent.getExtras();
Object[] object = (Object[]) Objects.requireNonNull(extras).get("pdus");
if (object != null) { if (object != null) {
//获取接收手机号
String phoneNumber;
int solt = capturedSimSlot(extras);
Log.d("SIM_SLOT", " Slot Number " + solt);
if (solt == 1) {
MyApplication appContext = (MyApplication) context.getApplicationContext();
phoneNumber = "SIM1" + appContext.getLine1Number();
} else {
phoneNumber = "SIM" + solt + "unknown";
}
List<SmsVo> smsVoList = new ArrayList<>(); List<SmsVo> smsVoList = new ArrayList<>();
String format = intent.getStringExtra("format"); String format = intent.getStringExtra("format");
Map<String, String> mobileToContent = new HashMap<>(); Map<String, String> mobileToContent = new HashMap<>();
@ -50,7 +65,7 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
} }
for (String mobile : mobileToContent.keySet()) { for (String mobile : mobileToContent.keySet()) {
smsVoList.add(new SmsVo(mobile, mobileToContent.get(mobile), date)); smsVoList.add(new SmsVo(mobile, mobileToContent.get(mobile), date, phoneNumber));
} }
Log.d(TAG, "短信:" + smsVoList); Log.d(TAG, "短信:" + smsVoList);
SendUtil.send_msg_list(context, smsVoList); SendUtil.send_msg_list(context, smsVoList);
@ -65,4 +80,30 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
} }
public int capturedSimSlot(Bundle bundle) {
int whichSIM = -1;
if (bundle.containsKey("subscription")) {
whichSIM = bundle.getInt("subscription");
}
if (whichSIM >= 0 && whichSIM < 5) {
/*In some device Subscription id is return as subscriber id*/
return 1;
}
if (bundle.containsKey("simId")) {
whichSIM = bundle.getInt("simId");
} else if (bundle.containsKey("com.android.phone.extra.slot")) {
whichSIM = bundle.getInt("com.android.phone.extra.slot");
} else {
String keyName = "";
for (String key : bundle.keySet()) {
if (key.contains("sim"))
keyName = key;
}
if (bundle.containsKey(keyName)) {
whichSIM = bundle.getInt(keyName);
}
}
return whichSIM;
}
} }

View File

@ -1,12 +1,14 @@
package com.idormy.sms.forwarder; package com.idormy.sms.forwarder;
import android.Manifest; import android.Manifest;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -57,21 +59,18 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
LogVo logVo = logVos.get(position - 1); LogVo logVo = logVos.get(position - 1);
logDetail(logVo); logDetail(logVo);
// Toast.makeText(MainActivity.this,String.valueOf(position),Toast.LENGTH_SHORT).show();
} }
}); });
// textv_msg.setMovementMethod(ScrollingMovementMethod.getInstance()); //检查权限是否获取
// textv_msg.setText(SendHistory.getHistory());
checkPermission(); checkPermission();
// intentFilter=new IntentFilter(); //获取本机号码
// intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
// intentFilter.addAction(MessageBroadcastReceiver.ACTION_DINGDING); String Line1Number = mTelephonyMgr.getLine1Number();
// smsBroadcastReceiver=new SMSBroadcastReceiver(); Log.d(TAG, "Line1Number: " + Line1Number);
// //动态注册广播 MyApplication appContext = ((MyApplication) getApplicationContext());
// registerReceiver(smsBroadcastReceiver, intentFilter); appContext.setLine1Number(Line1Number);
} }
// 初始化数据 // 初始化数据
@ -176,19 +175,20 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
startActivity(intent); startActivity(intent);
} }
// 检查权限是否获取android6.0及以上系统可能默认关闭权限且没提示
private void checkPermission() { private void checkPermission() {
// 检查权限是否获取android6.0及以上系统可能默认关闭权限且没提示
PackageManager pm = getPackageManager(); PackageManager pm = getPackageManager();
boolean permission_receive_boot = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.RECEIVE_BOOT_COMPLETED", this.getPackageName())); boolean permission_receive_boot = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.RECEIVE_BOOT_COMPLETED", this.getPackageName()));
boolean permission_readsms = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_SMS", this.getPackageName())); boolean permission_readsms = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_SMS", this.getPackageName()));
boolean permission_read_phone_state = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_PHONE_STATE", this.getPackageName()));
boolean permission_read_phone_numbers = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_PHONE_NUMBERS", this.getPackageName()));
if (!( if (!(permission_receive_boot && permission_readsms && permission_read_phone_state && permission_read_phone_numbers)) {
permission_receive_boot
&& permission_readsms
)) {
ActivityCompat.requestPermissions(this, new String[]{ ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.RECEIVE_BOOT_COMPLETED, Manifest.permission.RECEIVE_BOOT_COMPLETED,
Manifest.permission.READ_SMS, Manifest.permission.READ_SMS,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_PHONE_NUMBERS,
}, 0x01); }, 0x01);
} }
} }

View File

@ -17,6 +17,7 @@ import com.umeng.commonsdk.UMConfigure;
public class MyApplication extends Application { public class MyApplication extends Application {
private static final String TAG = "MyApplication"; private static final String TAG = "MyApplication";
private String Line1Number;
/** /**
* <meta-data * <meta-data
@ -54,6 +55,14 @@ public class MyApplication extends Application {
return channelName; return channelName;
} }
public String getLine1Number() {
return Line1Number;
}
public void setLine1Number(String s) {
Line1Number = s;
}
@Override @Override
protected void attachBaseContext(Context base) { protected void attachBaseContext(Context base) {
super.attachBaseContext(base); super.attachBaseContext(base);

View File

@ -650,7 +650,7 @@ public class SenderActivity extends AppCompatActivity {
String barkServer = editTextBarkServer.getText().toString(); String barkServer = editTextBarkServer.getText().toString();
if (!barkServer.isEmpty()) { if (!barkServer.isEmpty()) {
try { try {
SenderBarkMsg.sendMsg(handler, barkServer, "信息来源", "【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服"); SenderBarkMsg.sendMsg(handler, barkServer, "19999999999", "【京东】验证码为387481切勿将验证码告知他人请在页面中输入完成验证如有问题请点击 ihelp.jd.com 联系京东客服", "18888888888");
} catch (Exception e) { } catch (Exception e) {
Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); Toast.makeText(SenderActivity.this, "发送失败:" + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace(); e.printStackTrace();

View File

@ -8,14 +8,16 @@ public class SmsVo implements Serializable {
String mobile; String mobile;
String content; String content;
Date date; Date date;
String phoneNumber = "本机号码:未知";
public SmsVo() { public SmsVo() {
} }
public SmsVo(String mobile, String content, Date date) { public SmsVo(String mobile, String content, Date date, String phoneNumber) {
this.mobile = mobile; this.mobile = mobile;
this.content = content; this.content = content;
this.date = date; this.date = date;
this.phoneNumber = phoneNumber;
} }
public String getMobile() { public String getMobile() {
@ -42,10 +44,19 @@ public class SmsVo implements Serializable {
this.date = date; this.date = date;
} }
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getSmsVoForSend() { public String getSmsVoForSend() {
return mobile + "\n" + return mobile + "\n" +
content + "\n" + content + "\n" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date) + "\n" +
phoneNumber;
} }
@Override @Override
@ -54,6 +65,7 @@ public class SmsVo implements Serializable {
"mobile='" + mobile + '\'' + "mobile='" + mobile + '\'' +
", content='" + content + '\'' + ", content='" + content + '\'' +
", date=" + date + ", date=" + date +
", phoneNumber=" + phoneNumber +
'}'; '}';
} }
} }

View File

@ -221,7 +221,7 @@ public class SendUtil {
BarkSettingVo barkSettingVo = JSON.parseObject(senderModel.getJsonSetting(), BarkSettingVo.class); BarkSettingVo barkSettingVo = JSON.parseObject(senderModel.getJsonSetting(), BarkSettingVo.class);
if (barkSettingVo != null) { if (barkSettingVo != null) {
try { try {
SenderBarkMsg.sendMsg(null, barkSettingVo.getServer(), smsVo.getMobile(), smsVo.getContent()); SenderBarkMsg.sendMsg(null, barkSettingVo.getServer(), smsVo.getMobile(), smsVo.getContent(), smsVo.getPhoneNumber());
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "senderSendMsg: SenderBarkMsg error " + e.getMessage()); Log.e(TAG, "senderSendMsg: SenderBarkMsg error " + e.getMessage());
} }

View File

@ -2,6 +2,7 @@ package com.idormy.sms.forwarder.utils;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message;
import android.util.Log; import android.util.Log;
import java.io.IOException; import java.io.IOException;
@ -21,13 +22,14 @@ public class SenderBarkMsg {
static String TAG = "SenderBarkMsg"; static String TAG = "SenderBarkMsg";
public static void sendMsg(final Handler handError, String barkServer, String from, String content) throws Exception { public static void sendMsg(final Handler handError, String barkServer, String from, String content, String phoneNumber) throws Exception {
Log.i(TAG, "sendMsg barkServer:" + barkServer + " from:" + from + " content:" + content); Log.i(TAG, "sendMsg barkServer:" + barkServer + " from:" + from + " content:" + content + " phoneNumber:" + phoneNumber);
if (barkServer == null || barkServer.isEmpty()) { if (barkServer == null || barkServer.isEmpty()) {
return; return;
} }
content += "\n[" + phoneNumber + "]";
barkServer += URLEncoder.encode(from, "UTF-8"); barkServer += URLEncoder.encode(from, "UTF-8");
barkServer += "/" + URLEncoder.encode(content, "UTF-8"); barkServer += "/" + URLEncoder.encode(content, "UTF-8");
barkServer += "?isArchive=1"; //自动保存 barkServer += "?isArchive=1"; //自动保存
@ -51,7 +53,7 @@ public class SenderBarkMsg {
Log.d(TAG, "onFailure" + e.getMessage()); Log.d(TAG, "onFailure" + e.getMessage());
if (handError != null) { if (handError != null) {
android.os.Message msg = new android.os.Message(); Message msg = new Message();
msg.what = NOTIFY; msg.what = NOTIFY;
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString("DATA", "发送失败:" + e.getMessage()); bundle.putString("DATA", "发送失败:" + e.getMessage());
@ -67,7 +69,7 @@ public class SenderBarkMsg {
Log.d(TAG, "Code" + response.code() + responseStr); Log.d(TAG, "Code" + response.code() + responseStr);
if (handError != null) { if (handError != null) {
android.os.Message msg = new android.os.Message(); Message msg = new Message();
msg.what = NOTIFY; msg.what = NOTIFY;
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString("DATA", "发送状态:" + responseStr); bundle.putString("DATA", "发送状态:" + responseStr);