mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 01:17:41 +08:00
整理代码 && 解决Android 9.xx、10.xx收不到广播问题
This commit is contained in:
parent
313f8f3612
commit
11c82cefed
@ -49,7 +49,7 @@ Android手机监听短信并根据指定规则转发到其他手机:钉钉机
|
|||||||
- [x] 转发到企业微信应用消息
|
- [x] 转发到企业微信应用消息
|
||||||
- [x] 在线检测新版本、升级
|
- [x] 在线检测新版本、升级
|
||||||
- [x] 清理缓存
|
- [x] 清理缓存
|
||||||
- [x] 兼容6.xx、7.xx、8.xx、~~9.xx、10.xx~~(PS.暂未解决收不到广播问题)
|
- [x] 兼容6.xx、7.xx、8.xx、9.xx、10.xx
|
||||||
- [x] 支持双卡手机,增加卡槽标识/运营商/手机号(如果能获取的话)
|
- [x] 支持双卡手机,增加卡槽标识/运营商/手机号(如果能获取的话)
|
||||||
- [x] 支持多重匹配规则
|
- [x] 支持多重匹配规则
|
||||||
- [ ] 支持正则匹配规则
|
- [ ] 支持正则匹配规则
|
||||||
@ -111,6 +111,7 @@ Android手机监听短信并根据指定规则转发到其他手机:钉钉机
|
|||||||
+ [v1.4.0](app/release/SmsForwarder_release_20210304_1.4.0.apk) 支持多重匹配规则
|
+ [v1.4.0](app/release/SmsForwarder_release_20210304_1.4.0.apk) 支持多重匹配规则
|
||||||
+ [v1.4.1](app/release/SmsForwarder_release_20210304_1.4.1.apk) 设置中允许关闭页面帮助/表单填写提示
|
+ [v1.4.1](app/release/SmsForwarder_release_20210304_1.4.1.apk) 设置中允许关闭页面帮助/表单填写提示
|
||||||
+ [v1.5.0](app/release/SmsForwarder_release_20210305_1.5.0.apk) 新增转发到企业微信应用消息
|
+ [v1.5.0](app/release/SmsForwarder_release_20210305_1.5.0.apk) 新增转发到企业微信应用消息
|
||||||
|
+ [v1.5.1](app/release/SmsForwarder_release_20210310_1.5.1.apk) 解决Android 9.xx、10.xx收不到广播问题
|
||||||
|
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
|
|
||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 28
|
buildToolsVersion '29.0.3'
|
||||||
|
compileSdkVersion 29
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility 1.8
|
sourceCompatibility 1.8
|
||||||
targetCompatibility 1.8
|
targetCompatibility 1.8
|
||||||
@ -13,11 +12,14 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.idormy.sms.forwarder"
|
applicationId "com.idormy.sms.forwarder"
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 28
|
targetSdkVersion 29
|
||||||
versionCode 13
|
versionCode 14
|
||||||
versionName "1.5.0"
|
versionName "1.5.1"
|
||||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||||
}
|
}
|
||||||
|
lintOptions {
|
||||||
|
checkReleaseBuilds false
|
||||||
|
}
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
//签名信息保存在 C:\Users\<Username>\.gradle\gradle.properties
|
//签名信息保存在 C:\Users\<Username>\.gradle\gradle.properties
|
||||||
release {
|
release {
|
||||||
@ -38,7 +40,6 @@ android {
|
|||||||
signingConfig signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buildToolsVersion '29.0.2'
|
|
||||||
//apk file name
|
//apk file name
|
||||||
android.applicationVariants.all { variant ->
|
android.applicationVariants.all { variant ->
|
||||||
variant.outputs.all {
|
variant.outputs.all {
|
||||||
@ -57,11 +58,11 @@ android {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||||
testImplementation 'junit:junit:4.12'
|
//testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
//androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
|
//androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
|
||||||
|
|
||||||
//okhttp
|
//okhttp
|
||||||
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
|
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
|
||||||
|
BIN
app/release/SmsForwarder_release_20210310_1.5.1.apk
Normal file
BIN
app/release/SmsForwarder_release_20210310_1.5.1.apk
Normal file
Binary file not shown.
@ -10,9 +10,9 @@
|
|||||||
{
|
{
|
||||||
"type": "SINGLE",
|
"type": "SINGLE",
|
||||||
"filters": [],
|
"filters": [],
|
||||||
"versionCode": 13,
|
"versionCode": 14,
|
||||||
"versionName": "1.5.0",
|
"versionName": "1.5.1",
|
||||||
"outputFile": "SmsForwarder_release_20210305_1.5.0.apk"
|
"outputFile": "SmsForwarder_release_20210310_1.5.1.apk"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -7,6 +7,7 @@
|
|||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
android:requestLegacyExternalStorage="true"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
@ -47,7 +48,7 @@
|
|||||||
<receiver
|
<receiver
|
||||||
android:name="com.idormy.sms.forwarder.BroadCastReceiver.SmsForwarderBroadcastReceiver"
|
android:name="com.idormy.sms.forwarder.BroadCastReceiver.SmsForwarderBroadcastReceiver"
|
||||||
android:permission="android.permission.BROADCAST_SMS">
|
android:permission="android.permission.BROADCAST_SMS">
|
||||||
<intent-filter android:priority="999">
|
<intent-filter android:priority="2147483647">
|
||||||
<!--短信广播-->
|
<!--短信广播-->
|
||||||
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
|
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
@ -56,15 +57,16 @@
|
|||||||
<service android:name="com.idormy.sms.forwarder.FrontService" />
|
<service android:name="com.idormy.sms.forwarder.FrontService" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<!-- 授予应用程序访问系统开机事件的权限 -->
|
||||||
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
||||||
<uses-permission android:name="android.permission.READ_SMS" />
|
<uses-permission android:name="android.permission.READ_SMS" />
|
||||||
<uses-permission android:name="android.permission.SEND_SMS" />
|
<uses-permission android:name="android.permission.SEND_SMS" />
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
<!-- 授予应用程序访问系统开机事件的权限 -->
|
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
||||||
<!--Android 9(API 级别 28)或更高版本并使用前台服务,则其必须请求 FOREGROUND_SERVICE 权限-->
|
<!--Android 9(API 级别 28)或更高版本并使用前台服务,则其必须请求 FOREGROUND_SERVICE 权限-->
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
|
||||||
|
@ -9,7 +9,8 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.idormy.sms.forwarder.MyApplication;
|
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.sender.SendUtil;
|
||||||
|
import com.idormy.sms.forwarder.utils.SimUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -26,7 +27,7 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
String receiveAction = intent.getAction();
|
String receiveAction = intent.getAction();
|
||||||
Log.d(TAG, "onReceive intent " + receiveAction);
|
Log.d(TAG, "onReceive intent " + receiveAction);
|
||||||
if (receiveAction.equals("android.provider.Telephony.SMS_RECEIVED")) {
|
if ("android.provider.Telephony.SMS_RECEIVED".equals(receiveAction)) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
Bundle extras = intent.getExtras();
|
Bundle extras = intent.getExtras();
|
||||||
@ -34,11 +35,15 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
|
|||||||
if (object != null) {
|
if (object != null) {
|
||||||
|
|
||||||
//获取接收手机号
|
//获取接收手机号
|
||||||
String simInfoId = String.valueOf(capturedSimSlot(extras));
|
String phoneNumber = "";
|
||||||
Log.d("SIM_SLOT", " Slot Number " + simInfoId);
|
try {
|
||||||
Map<String, String> sim = MyApplication.SimInfo.get(simInfoId);
|
String simInfoId = String.valueOf(SimUtil.getSimId(extras));
|
||||||
int sim_id = Integer.parseInt(sim.get("sim_id")) + 1;
|
Map<String, String> sim = MyApplication.SimInfo.get(simInfoId);
|
||||||
String phoneNumber = "SIM" + sim_id + "_" + sim.get("carrier_name") + "_" + sim.get("phone_number");
|
int sim_id = Integer.parseInt(sim.get("sim_id")) + 1;
|
||||||
|
phoneNumber = "SIM" + sim_id + "_" + sim.get("carrier_name") + "_" + sim.get("phone_number");
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "获取接收手机号失败:" + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
List<SmsVo> smsVoList = new ArrayList<>();
|
List<SmsVo> smsVoList = new ArrayList<>();
|
||||||
String format = intent.getStringExtra("format");
|
String format = intent.getStringExtra("format");
|
||||||
@ -77,33 +82,4 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取卡槽ID
|
|
||||||
private 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*/
|
|
||||||
//TODO:不确定能不能直接返回
|
|
||||||
return whichSIM;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -234,17 +234,32 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
|
|||||||
// 检查权限是否获取(android6.0及以上系统可能默认关闭权限,且没提示)
|
// 检查权限是否获取(android6.0及以上系统可能默认关闭权限,且没提示)
|
||||||
private void checkPermission() {
|
private void checkPermission() {
|
||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
|
boolean permission_internet = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.INTERNET", this.getPackageName()));
|
||||||
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_foreground_service = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.FOREGROUND_SERVICE", this.getPackageName()));
|
||||||
|
boolean permission_read_external_storage = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", this.getPackageName()));
|
||||||
|
boolean permission_write_external_storage = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", this.getPackageName()));
|
||||||
|
boolean permission_receive_sms = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.RECEIVE_SMS", this.getPackageName()));
|
||||||
|
boolean permission_read_sms = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_SMS", this.getPackageName()));
|
||||||
|
boolean permission_send_sms = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.SEND_SMS", this.getPackageName()));
|
||||||
boolean permission_read_phone_state = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_PHONE_STATE", 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()));
|
boolean permission_read_phone_numbers = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_PHONE_NUMBERS", this.getPackageName()));
|
||||||
|
|
||||||
if (!(permission_receive_boot && permission_readsms && permission_read_phone_state && permission_read_phone_numbers)) {
|
if (!(permission_internet && permission_receive_boot && permission_foreground_service &&
|
||||||
|
permission_read_external_storage && permission_write_external_storage &&
|
||||||
|
permission_receive_sms && permission_read_sms && permission_send_sms &&
|
||||||
|
permission_read_phone_state && permission_read_phone_numbers)) {
|
||||||
ActivityCompat.requestPermissions(this, new String[]{
|
ActivityCompat.requestPermissions(this, new String[]{
|
||||||
|
Manifest.permission.INTERNET,
|
||||||
Manifest.permission.RECEIVE_BOOT_COMPLETED,
|
Manifest.permission.RECEIVE_BOOT_COMPLETED,
|
||||||
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||||
|
Manifest.permission.RECEIVE_SMS,
|
||||||
Manifest.permission.READ_SMS,
|
Manifest.permission.READ_SMS,
|
||||||
|
Manifest.permission.SEND_SMS,
|
||||||
Manifest.permission.READ_PHONE_STATE,
|
Manifest.permission.READ_PHONE_STATE,
|
||||||
Manifest.permission.READ_PHONE_NUMBERS,
|
Manifest.permission.READ_PHONE_NUMBERS,
|
||||||
|
Manifest.permission.FOREGROUND_SERVICE,
|
||||||
}, 0x01);
|
}, 0x01);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,7 +325,7 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "getSimInfo fail:" + e.getMessage());
|
Log.e(TAG, "getSimInfo fail:" + e.getMessage());
|
||||||
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
|
Toast.makeText(MainActivity.this, "获取SIM卡信息失败:请先手动设置", Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@ import android.os.Build;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.idormy.sms.forwarder.sender.SendHistory;
|
||||||
import com.idormy.sms.forwarder.utils.Define;
|
import com.idormy.sms.forwarder.utils.Define;
|
||||||
import com.idormy.sms.forwarder.utils.SendHistory;
|
|
||||||
import com.idormy.sms.forwarder.utils.SettingUtil;
|
import com.idormy.sms.forwarder.utils.SettingUtil;
|
||||||
import com.smailnet.emailkit.EmailKit;
|
import com.smailnet.emailkit.EmailKit;
|
||||||
import com.umeng.analytics.MobclickAgent;
|
import com.umeng.analytics.MobclickAgent;
|
||||||
@ -96,5 +96,8 @@ public class MyApplication extends Application {
|
|||||||
|
|
||||||
SharedPreferences sp = MyApplication.this.getSharedPreferences(Define.SP_CONFIG, Context.MODE_PRIVATE);
|
SharedPreferences sp = MyApplication.this.getSharedPreferences(Define.SP_CONFIG, Context.MODE_PRIVATE);
|
||||||
showHelpTip = sp.getBoolean(Define.SP_CONFIG_SWITCH_HELP_TIP, true);
|
showHelpTip = sp.getBoolean(Define.SP_CONFIG_SWITCH_HELP_TIP, true);
|
||||||
|
|
||||||
|
String jsonSimInfo = sp.getString(Define.SP_CONFIG_SIM_INFO, "");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,9 @@ import com.idormy.sms.forwarder.adapter.RuleAdapter;
|
|||||||
import com.idormy.sms.forwarder.model.RuleModel;
|
import com.idormy.sms.forwarder.model.RuleModel;
|
||||||
import com.idormy.sms.forwarder.model.SenderModel;
|
import com.idormy.sms.forwarder.model.SenderModel;
|
||||||
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
||||||
|
import com.idormy.sms.forwarder.sender.SendUtil;
|
||||||
|
import com.idormy.sms.forwarder.sender.SenderUtil;
|
||||||
import com.idormy.sms.forwarder.utils.RuleUtil;
|
import com.idormy.sms.forwarder.utils.RuleUtil;
|
||||||
import com.idormy.sms.forwarder.utils.SendUtil;
|
|
||||||
import com.idormy.sms.forwarder.utils.SenderUtil;
|
|
||||||
import com.umeng.analytics.MobclickAgent;
|
import com.umeng.analytics.MobclickAgent;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -158,7 +158,7 @@ public class RuleActivity extends AppCompatActivity {
|
|||||||
btSetRuleSender.setOnClickListener(new View.OnClickListener() {
|
btSetRuleSender.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Toast.makeText(RuleActivity.this, "selectSender", Toast.LENGTH_LONG).show();
|
//Toast.makeText(RuleActivity.this, "selectSender", Toast.LENGTH_LONG).show();
|
||||||
selectSender(ruleSenderTv);
|
selectSender(ruleSenderTv);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -28,13 +28,13 @@ 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.WebNotifySettingVo;
|
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
|
||||||
import com.idormy.sms.forwarder.utils.SenderBarkMsg;
|
import com.idormy.sms.forwarder.sender.SenderBarkMsg;
|
||||||
import com.idormy.sms.forwarder.utils.SenderDingdingMsg;
|
import com.idormy.sms.forwarder.sender.SenderDingdingMsg;
|
||||||
import com.idormy.sms.forwarder.utils.SenderMailMsg;
|
import com.idormy.sms.forwarder.sender.SenderMailMsg;
|
||||||
import com.idormy.sms.forwarder.utils.SenderQyWxAppMsg;
|
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
|
||||||
import com.idormy.sms.forwarder.utils.SenderQyWxGroupRobotMsg;
|
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
|
||||||
import com.idormy.sms.forwarder.utils.SenderUtil;
|
import com.idormy.sms.forwarder.sender.SenderUtil;
|
||||||
import com.idormy.sms.forwarder.utils.SenderWebNotifyMsg;
|
import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg;
|
||||||
import com.umeng.analytics.MobclickAgent;
|
import com.umeng.analytics.MobclickAgent;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -2,7 +2,6 @@ package com.idormy.sms.forwarder;
|
|||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@ -12,12 +11,10 @@ import android.util.Log;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import com.idormy.sms.forwarder.BroadCastReceiver.RebootBroadcastReceiver;
|
import com.idormy.sms.forwarder.BroadCastReceiver.RebootBroadcastReceiver;
|
||||||
@ -27,9 +24,6 @@ import com.idormy.sms.forwarder.utils.aUtil;
|
|||||||
import com.xuexiang.xupdate.easy.EasyUpdate;
|
import com.xuexiang.xupdate.easy.EasyUpdate;
|
||||||
import com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker;
|
import com.xuexiang.xupdate.proxy.impl.DefaultUpdateChecker;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
|
|
||||||
public class SettingActivity extends AppCompatActivity {
|
public class SettingActivity extends AppCompatActivity {
|
||||||
private String TAG = "SettingActivity";
|
private String TAG = "SettingActivity";
|
||||||
@ -164,83 +158,7 @@ public class SettingActivity extends AppCompatActivity {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkNewVersion() {
|
//发起添加群流程
|
||||||
try {
|
|
||||||
String updateUrl = "https://xupdate.bms.ink/update/checkVersion?appKey=com.idormy.sms.forwarder&versionCode=";
|
|
||||||
updateUrl += aUtil.getVersionCode(SettingActivity.this);
|
|
||||||
EasyUpdate.checkUpdate(SettingActivity.this, updateUrl);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void feedbackcommit(View view) {
|
|
||||||
final AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this);
|
|
||||||
View view1 = View.inflate(SettingActivity.this, R.layout.dialog_feedback, null);
|
|
||||||
|
|
||||||
final EditText feedback_et_email = view1.findViewById(R.id.feedback_et_email);
|
|
||||||
final EditText feedback_et_text = view1.findViewById(R.id.feedback_et_text);
|
|
||||||
|
|
||||||
builder
|
|
||||||
.setTitle(R.string.feedback_input_text)
|
|
||||||
.setView(view1)
|
|
||||||
.create();
|
|
||||||
builder.setPositiveButton("提交反馈", new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
Map<String, String> feedBackData = new HashMap<>();
|
|
||||||
feedBackData.put("email", feedback_et_email.getText().toString());
|
|
||||||
feedBackData.put("text", feedback_et_text.getText().toString());
|
|
||||||
/*new HttpUtil().asyncPost("https://api.sl.willanddo.com/api/tsms/feedBack", feedBackData, new HttpI.Callback() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(String result) {
|
|
||||||
Log.i(TAG, "onResponse: " + result);
|
|
||||||
if (result != null) {
|
|
||||||
FeedBackResult feedBackResult = JSON.parseObject(result, FeedBackResult.class);
|
|
||||||
Log.i(TAG, "feedBackResult: " + feedBackResult);
|
|
||||||
|
|
||||||
if (feedBackResult != null) {
|
|
||||||
JSONObject feedBackResultObject = JSON.parseObject(result);
|
|
||||||
Toast.makeText(SettingActivity.this, feedBackResultObject.getString("message"), Toast.LENGTH_LONG).show();
|
|
||||||
} else {
|
|
||||||
Toast.makeText(SettingActivity.this, "感谢您的反馈,我们将尽快处理!", Toast.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Toast.makeText(SettingActivity.this, "感谢您的反馈,我们将尽快处理!", Toast.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(String error) {
|
|
||||||
Log.i(TAG, "onError: " + error);
|
|
||||||
Toast.makeText(SettingActivity.this, error, Toast.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
}
|
|
||||||
});*/
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
Toast.makeText(SettingActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
|
|
||||||
Log.d(TAG, "feedback e: " + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************
|
|
||||||
*
|
|
||||||
* 发起添加群流程。群号:idormy 多米互联(562854376) 的 key 为: HvroJRfvK7GGfnQgaIQ4Rh1un9O83N7M
|
|
||||||
* 调用 joinQQGroup(HvroJRfvK7GGfnQgaIQ4Rh1un9O83N7M) 即可发起手Q客户端申请加群 idormy 多米互联(562854376)
|
|
||||||
*
|
|
||||||
* @param key 由官网生成的key
|
|
||||||
* @return 返回true表示呼起手Q成功,返回false表示呼起失败
|
|
||||||
******************/
|
|
||||||
public boolean joinQQGroup(String key) {
|
public boolean joinQQGroup(String key) {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D" + key));
|
intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D" + key));
|
||||||
|
@ -11,7 +11,7 @@ import android.widget.TextView;
|
|||||||
import com.idormy.sms.forwarder.R;
|
import com.idormy.sms.forwarder.R;
|
||||||
import com.idormy.sms.forwarder.model.RuleModel;
|
import com.idormy.sms.forwarder.model.RuleModel;
|
||||||
import com.idormy.sms.forwarder.model.SenderModel;
|
import com.idormy.sms.forwarder.model.SenderModel;
|
||||||
import com.idormy.sms.forwarder.utils.SenderUtil;
|
import com.idormy.sms.forwarder.sender.SenderUtil;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -10,6 +10,9 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.idormy.sms.forwarder.model.LogModel;
|
import com.idormy.sms.forwarder.model.LogModel;
|
||||||
import com.idormy.sms.forwarder.model.LogTable;
|
import com.idormy.sms.forwarder.model.LogTable;
|
||||||
|
import com.idormy.sms.forwarder.utils.DbHelper;
|
||||||
|
import com.idormy.sms.forwarder.utils.Define;
|
||||||
|
import com.idormy.sms.forwarder.utils.SettingUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@ -15,6 +15,9 @@ 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.SmsVo;
|
import com.idormy.sms.forwarder.model.vo.SmsVo;
|
||||||
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.RuleUtil;
|
||||||
|
import com.idormy.sms.forwarder.utils.SettingUtil;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@ -7,6 +7,7 @@ import android.util.Base64;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.idormy.sms.forwarder.utils.SettingUtil;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@ -9,6 +9,7 @@ import android.util.Log;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.idormy.sms.forwarder.MyApplication;
|
import com.idormy.sms.forwarder.MyApplication;
|
||||||
|
import com.idormy.sms.forwarder.utils.SettingUtil;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -9,6 +9,7 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.idormy.sms.forwarder.model.SenderModel;
|
import com.idormy.sms.forwarder.model.SenderModel;
|
||||||
import com.idormy.sms.forwarder.model.SenderTable;
|
import com.idormy.sms.forwarder.model.SenderTable;
|
||||||
|
import com.idormy.sms.forwarder.utils.DbHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
@ -1,4 +1,4 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
package com.idormy.sms.forwarder.sender;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.utils;
|
|||||||
public class Define {
|
public class Define {
|
||||||
public static String SP_CONFIG = "forwarder_config";
|
public static String SP_CONFIG = "forwarder_config";
|
||||||
public static String SP_CONFIG_SWITCH_HELP_TIP = "forwarder_config_switch_help_tip";
|
public static String SP_CONFIG_SWITCH_HELP_TIP = "forwarder_config_switch_help_tip";
|
||||||
|
public static String SP_CONFIG_SIM_INFO = "forwarder_config_sim_info";
|
||||||
public static String SP_MSG = "forwarder_msg";
|
public static String SP_MSG = "forwarder_msg";
|
||||||
public static String SP_MSG_SET_KEY = "forwarder_msg_set_key";
|
public static String SP_MSG_SET_KEY = "forwarder_msg_set_key";
|
||||||
public static String SP_MSG_SEND_UTIL_EMAIL_HOST_KEY = "forwarder_msg_send_util_email_host_key";
|
public static String SP_MSG_SEND_UTIL_EMAIL_HOST_KEY = "forwarder_msg_send_util_email_host_key";
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
package com.idormy.sms.forwarder.utils;
|
|
||||||
|
|
||||||
import android.util.Base64;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
|
|
||||||
import javax.crypto.Mac;
|
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
|
||||||
|
|
||||||
import okhttp3.Call;
|
|
||||||
import okhttp3.Callback;
|
|
||||||
import okhttp3.MediaType;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
|
||||||
import okhttp3.RequestBody;
|
|
||||||
import okhttp3.Response;
|
|
||||||
|
|
||||||
public class DingdingMsg {
|
|
||||||
|
|
||||||
static String TAG = "DingdingMsg";
|
|
||||||
|
|
||||||
public static void sendMsg(String msg) throws Exception {
|
|
||||||
|
|
||||||
String webhook_token = SettingUtil.get_using_dingding_token();
|
|
||||||
String webhook_secret = SettingUtil.get_using_dingding_secret();
|
|
||||||
if (webhook_token.equals("")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!webhook_secret.equals("")) {
|
|
||||||
Long timestamp = System.currentTimeMillis();
|
|
||||||
|
|
||||||
String stringToSign = timestamp + "\n" + webhook_secret;
|
|
||||||
Mac mac = Mac.getInstance("HmacSHA256");
|
|
||||||
mac.init(new SecretKeySpec(webhook_secret.getBytes("UTF-8"), "HmacSHA256"));
|
|
||||||
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
|
|
||||||
String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8");
|
|
||||||
webhook_token += "×tamp=" + timestamp + "&sign=" + sign;
|
|
||||||
Log.i(TAG, "webhook_token:" + webhook_token);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
final String msgf = msg;
|
|
||||||
String textMsg = "{ \"msgtype\": \"text\", \"text\": {\"content\": \"" + msg + "\"}}";
|
|
||||||
OkHttpClient client = new OkHttpClient();
|
|
||||||
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),
|
|
||||||
textMsg);
|
|
||||||
|
|
||||||
final Request request = new Request.Builder()
|
|
||||||
.url(webhook_token)
|
|
||||||
.addHeader("Content-Type", "application/json; charset=utf-8")
|
|
||||||
.post(requestBody)
|
|
||||||
.build();
|
|
||||||
Call call = client.newCall(request);
|
|
||||||
call.enqueue(new Callback() {
|
|
||||||
@Override
|
|
||||||
public void onFailure(Call call, IOException e) {
|
|
||||||
Log.d(TAG, "onFailure:" + e.getMessage());
|
|
||||||
SendHistory.addHistory("钉钉转发:" + msgf + "onFailure:" + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResponse(Call call, Response response) throws IOException {
|
|
||||||
final String responseStr = response.body().string();
|
|
||||||
Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr);
|
|
||||||
SendHistory.addHistory("钉钉转发:" + msgf + "Code:" + String.valueOf(response.code()) + responseStr);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
package com.idormy.sms.forwarder.utils;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
|
||||||
|
public class SimUtil {
|
||||||
|
private static String TAG = "SimUtil";
|
||||||
|
|
||||||
|
//获取卡槽ID
|
||||||
|
public static int getSimId(Bundle bundle) {
|
||||||
|
int whichSIM = -1;
|
||||||
|
if (bundle == null) {
|
||||||
|
return whichSIM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bundle.containsKey("subscription")) {
|
||||||
|
whichSIM = bundle.getInt("subscription");
|
||||||
|
}
|
||||||
|
if (whichSIM >= 0 && whichSIM < 5) {
|
||||||
|
/*In some device Subscription id is return as subscriber id*/
|
||||||
|
//TODO:不确定能不能直接返回
|
||||||
|
Log.d(TAG, "whichSIM >= 0 && whichSIM < 5:" + whichSIM);
|
||||||
|
} else {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(TAG, " Slot Number " + whichSIM);
|
||||||
|
return whichSIM;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user