整理代码 && 解决Android 9.xx、10.xx收不到广播问题

pull/67/head
pppscn 4 years ago
parent 313f8f3612
commit 11c82cefed

@ -49,7 +49,7 @@ Android手机监听短信并根据指定规则转发到其他手机钉钉机
- [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] 支持多重匹配规则
- [ ] 支持正则匹配规则
@ -111,6 +111,7 @@ Android手机监听短信并根据指定规则转发到其他手机钉钉机
+ [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.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: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
buildToolsVersion '29.0.3'
compileSdkVersion 29
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
@ -13,11 +12,14 @@ android {
defaultConfig {
applicationId "com.idormy.sms.forwarder"
minSdkVersion 23
targetSdkVersion 28
versionCode 13
versionName "1.5.0"
targetSdkVersion 29
versionCode 14
versionName "1.5.1"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
lintOptions {
checkReleaseBuilds false
}
signingConfigs {
// C:\Users\<Username>\.gradle\gradle.properties
release {
@ -38,7 +40,6 @@ android {
signingConfig signingConfigs.release
}
}
buildToolsVersion '29.0.2'
//apk file name
android.applicationVariants.all { variant ->
variant.outputs.all {
@ -57,11 +58,11 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
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'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
//testImplementation 'junit:junit:4.12'
//androidTestImplementation 'androidx.test.ext:junit:1.1.1'
//androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
//okhttp
implementation 'com.squareup.okhttp3:okhttp:4.9.0'

@ -10,9 +10,9 @@
{
"type": "SINGLE",
"filters": [],
"versionCode": 13,
"versionName": "1.5.0",
"outputFile": "SmsForwarder_release_20210305_1.5.0.apk"
"versionCode": 14,
"versionName": "1.5.1",
"outputFile": "SmsForwarder_release_20210310_1.5.1.apk"
}
]
}

@ -7,6 +7,7 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
@ -47,7 +48,7 @@
<receiver
android:name="com.idormy.sms.forwarder.BroadCastReceiver.SmsForwarderBroadcastReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="999">
<intent-filter android:priority="2147483647">
<!--短信广播-->
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
@ -56,15 +57,16 @@
<service android:name="com.idormy.sms.forwarder.FrontService" />
</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.READ_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_EXTERNAL_STORAGE" />
<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" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<!--Android 9API 级别 28或更高版本并使用前台服务则其必须请求 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.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.Date;
@ -26,7 +27,7 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
String receiveAction = intent.getAction();
Log.d(TAG, "onReceive intent " + receiveAction);
if (receiveAction.equals("android.provider.Telephony.SMS_RECEIVED")) {
if ("android.provider.Telephony.SMS_RECEIVED".equals(receiveAction)) {
try {
Bundle extras = intent.getExtras();
@ -34,11 +35,15 @@ public class SmsForwarderBroadcastReceiver extends BroadcastReceiver {
if (object != null) {
//获取接收手机号
String simInfoId = String.valueOf(capturedSimSlot(extras));
Log.d("SIM_SLOT", " Slot Number " + simInfoId);
Map<String, String> sim = MyApplication.SimInfo.get(simInfoId);
int sim_id = Integer.parseInt(sim.get("sim_id")) + 1;
String phoneNumber = "SIM" + sim_id + "_" + sim.get("carrier_name") + "_" + sim.get("phone_number");
String phoneNumber = "";
try {
String simInfoId = String.valueOf(SimUtil.getSimId(extras));
Map<String, String> sim = MyApplication.SimInfo.get(simInfoId);
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<>();
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及以上系统可能默认关闭权限,且没提示)
private void checkPermission() {
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_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_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[]{
Manifest.permission.INTERNET,
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.SEND_SMS,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_PHONE_NUMBERS,
Manifest.permission.FOREGROUND_SERVICE,
}, 0x01);
}
}
@ -310,7 +325,7 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
}
} catch (Exception e) {
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.util.Log;
import com.idormy.sms.forwarder.sender.SendHistory;
import com.idormy.sms.forwarder.utils.Define;
import com.idormy.sms.forwarder.utils.SendHistory;
import com.idormy.sms.forwarder.utils.SettingUtil;
import com.smailnet.emailkit.EmailKit;
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);
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.SenderModel;
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.SendUtil;
import com.idormy.sms.forwarder.utils.SenderUtil;
import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
@ -158,7 +158,7 @@ public class RuleActivity extends AppCompatActivity {
btSetRuleSender.setOnClickListener(new View.OnClickListener() {
@Override
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);
}
});

@ -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.QYWXGroupRobotSettingVo;
import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo;
import com.idormy.sms.forwarder.utils.SenderBarkMsg;
import com.idormy.sms.forwarder.utils.SenderDingdingMsg;
import com.idormy.sms.forwarder.utils.SenderMailMsg;
import com.idormy.sms.forwarder.utils.SenderQyWxAppMsg;
import com.idormy.sms.forwarder.utils.SenderQyWxGroupRobotMsg;
import com.idormy.sms.forwarder.utils.SenderUtil;
import com.idormy.sms.forwarder.utils.SenderWebNotifyMsg;
import com.idormy.sms.forwarder.sender.SenderBarkMsg;
import com.idormy.sms.forwarder.sender.SenderDingdingMsg;
import com.idormy.sms.forwarder.sender.SenderMailMsg;
import com.idormy.sms.forwarder.sender.SenderQyWxAppMsg;
import com.idormy.sms.forwarder.sender.SenderQyWxGroupRobotMsg;
import com.idormy.sms.forwarder.sender.SenderUtil;
import com.idormy.sms.forwarder.sender.SenderWebNotifyMsg;
import com.umeng.analytics.MobclickAgent;
import java.text.SimpleDateFormat;

@ -2,7 +2,6 @@ package com.idormy.sms.forwarder;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@ -12,12 +11,10 @@ import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
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.proxy.impl.DefaultUpdateChecker;
import java.util.HashMap;
import java.util.Map;
public class SettingActivity extends AppCompatActivity {
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 trueQfalse
******************/
//发起添加群流程
public boolean joinQQGroup(String key) {
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));

@ -11,7 +11,7 @@ import android.widget.TextView;
import com.idormy.sms.forwarder.R;
import com.idormy.sms.forwarder.model.RuleModel;
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;

@ -1,4 +1,4 @@
package com.idormy.sms.forwarder.utils;
package com.idormy.sms.forwarder.sender;
import android.content.ContentValues;
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.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.HashSet;

@ -1,4 +1,4 @@
package com.idormy.sms.forwarder.utils;
package com.idormy.sms.forwarder.sender;
import android.content.Context;
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.SmsVo;
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;

@ -1,4 +1,4 @@
package com.idormy.sms.forwarder.utils;
package com.idormy.sms.forwarder.sender;
import android.os.Bundle;
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.Handler;
@ -7,6 +7,7 @@ import android.util.Base64;
import android.util.Log;
import com.alibaba.fastjson.JSON;
import com.idormy.sms.forwarder.utils.SettingUtil;
import java.io.IOException;
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.Handler;

@ -1,4 +1,4 @@
package com.idormy.sms.forwarder.utils;
package com.idormy.sms.forwarder.sender;
import android.os.Bundle;
import android.os.Handler;
@ -9,6 +9,7 @@ import android.util.Log;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.idormy.sms.forwarder.MyApplication;
import com.idormy.sms.forwarder.utils.SettingUtil;
import java.io.IOException;
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.Handler;

@ -1,4 +1,4 @@
package com.idormy.sms.forwarder.utils;
package com.idormy.sms.forwarder.sender;
import android.content.ContentValues;
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.SenderTable;
import com.idormy.sms.forwarder.utils.DbHelper;
import java.util.ArrayList;
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.Handler;

@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.utils;
public class Define {
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_SIM_INFO = "forwarder_config_sim_info";
public static String SP_MSG = "forwarder_msg";
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";

@ -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 += "&timestamp=" + 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…
Cancel
Save