mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 09:27:41 +08:00
修复:来电转发的卡槽信息不准确
This commit is contained in:
parent
5c8d19f93c
commit
928c3f7003
@ -53,8 +53,8 @@ android {
|
|||||||
signingConfig signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
minifyEnabled true
|
//minifyEnabled true
|
||||||
shrinkResources true
|
//shrinkResources true
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
|
@ -11,17 +11,19 @@ public class CallInfo {
|
|||||||
public Long dateLong; //获取通话日期
|
public Long dateLong; //获取通话日期
|
||||||
public int duration;//获取通话时长,值为多少秒
|
public int duration;//获取通话时长,值为多少秒
|
||||||
public int type; //获取通话类型:1.呼入 2.呼出 3.未接
|
public int type; //获取通话类型:1.呼入 2.呼出 3.未接
|
||||||
public int subscriptionId;
|
public String viaNumber; //来源号码
|
||||||
|
public int subscriptionId; //卡槽id
|
||||||
|
|
||||||
public CallInfo() {
|
public CallInfo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public CallInfo(String name, String number, Long dateLong, int duration, int type, int subscriptionId) {
|
public CallInfo(String name, String number, Long dateLong, int duration, int type, String viaNumber, int subscriptionId) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.number = number;
|
this.number = number;
|
||||||
this.dateLong = dateLong;
|
this.dateLong = dateLong;
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
this.viaNumber = viaNumber;
|
||||||
this.subscriptionId = subscriptionId;
|
this.subscriptionId = subscriptionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +36,7 @@ public class CallInfo {
|
|||||||
", dateLong=" + dateLong +
|
", dateLong=" + dateLong +
|
||||||
", duration=" + duration +
|
", duration=" + duration +
|
||||||
", type=" + type +
|
", type=" + type +
|
||||||
|
", viaNumber=" + viaNumber +
|
||||||
", subscriptionId=" + subscriptionId +
|
", subscriptionId=" + subscriptionId +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@SuppressWarnings("CommentedOutCode")
|
||||||
public class PhoneStateReceiver extends BroadcastReceiver {
|
public class PhoneStateReceiver extends BroadcastReceiver {
|
||||||
private static final String TAG = "PhoneStateReceiver";
|
private static final String TAG = "PhoneStateReceiver";
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
@ -36,6 +37,13 @@ public class PhoneStateReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
|
//Bundle bundle = intent.getExtras();
|
||||||
|
//if (bundle != null) {
|
||||||
|
// for (String key : bundle.keySet()) {
|
||||||
|
// Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
|
if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
|
||||||
//获取来电号码
|
//获取来电号码
|
||||||
String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
|
String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
|
||||||
@ -77,15 +85,18 @@ public class PhoneStateReceiver extends BroadcastReceiver {
|
|||||||
CallInfo callInfo = PhoneUtils.getLastCallInfo(phoneNumber);
|
CallInfo callInfo = PhoneUtils.getLastCallInfo(phoneNumber);
|
||||||
if (callInfo == null) return;
|
if (callInfo == null) return;
|
||||||
|
|
||||||
if ((callInfo.getType() == 1 && !SettingUtil.getSwitchCallType1())
|
int type = callInfo.getType();
|
||||||
|| (callInfo.getType() == 2 && !SettingUtil.getSwitchCallType2())
|
if ((type == 1 && !SettingUtil.getSwitchCallType1())
|
||||||
|| (callInfo.getType() == 3 && !SettingUtil.getSwitchCallType3())) {
|
|| (type == 2 && !SettingUtil.getSwitchCallType2())
|
||||||
|
|| (type == 3 && !SettingUtil.getSwitchCallType3())) {
|
||||||
Log.w(TAG, "Call record forwarding of this type is not enabled, no processing will be done!");
|
Log.w(TAG, "Call record forwarding of this type is not enabled, no processing will be done!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.d(TAG, callInfo.toString());
|
||||||
String name = callInfo.getName();
|
String name = callInfo.getName();
|
||||||
Log.d(TAG, "getSubscriptionId = " + callInfo.getSubscriptionId());
|
String viaNumber = callInfo.getViaNumber(); //来源号码
|
||||||
|
Log.d(TAG, "getSubscriptionId = " + callInfo.getSubscriptionId()); //TODO:这里的SubscriptionId跟短信的不一样
|
||||||
int simId = SimUtil.getSimIdBySubscriptionId(callInfo.getSubscriptionId());
|
int simId = SimUtil.getSimIdBySubscriptionId(callInfo.getSubscriptionId());
|
||||||
String simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); //自定义备注优先
|
String simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); //自定义备注优先
|
||||||
simInfo = "SIM" + simId + "_" + simInfo;
|
simInfo = "SIM" + simId + "_" + simInfo;
|
||||||
@ -110,19 +121,21 @@ public class PhoneStateReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
SettingUtil.setPrevNoticeHash(phoneNumber, currHash);
|
SettingUtil.setPrevNoticeHash(phoneNumber, currHash);
|
||||||
|
|
||||||
SmsVo smsVo = new SmsVo(phoneNumber, getTypeText(context, callInfo.getType(), name), new Date(), simInfo);
|
SmsVo smsVo = new SmsVo(phoneNumber, getTypeText(context, type, name, viaNumber), new Date(), simInfo);
|
||||||
Log.d(TAG, "send_msg" + smsVo.toString());
|
Log.d(TAG, "send_msg" + smsVo.toString());
|
||||||
SendUtil.send_msg(context, smsVo, simId, "call");
|
SendUtil.send_msg(context, smsVo, simId, "call");
|
||||||
|
|
||||||
//SmsHubApi
|
//SmsHubApi
|
||||||
if (SettingUtil.getSwitchEnableSmsHubApi()) {
|
if (SettingUtil.getSwitchEnableSmsHubApi()) {
|
||||||
SmsHubActionHandler.putData(new SmsHubVo(SmsHubVo.Type.phone, simId, getTypeText(context, callInfo.getType(), name), phoneNumber));
|
SmsHubActionHandler.putData(new SmsHubVo(SmsHubVo.Type.phone, simId, getTypeText(context, type, name, viaNumber), phoneNumber));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取通话类型:1.呼入 2.呼出 3.未接
|
//获取通话类型:1.呼入 2.呼出 3.未接
|
||||||
private String getTypeText(Context context, int type, String name) {
|
private String getTypeText(Context context, int type, String name, String viaNumber) {
|
||||||
String str = context.getString(R.string.linkman) + name + "\n" + context.getString(R.string.mandatory_type);
|
String str = context.getString(R.string.linkman) + name + "\n";
|
||||||
|
if (!TextUtils.isEmpty(viaNumber)) str += context.getString(R.string.via_number) + viaNumber + "\n";
|
||||||
|
str += context.getString(R.string.mandatory_type);
|
||||||
if (type == 3) return str + context.getString(R.string.received_call);
|
if (type == 3) return str + context.getString(R.string.received_call);
|
||||||
if (type == 2) return str + context.getString(R.string.local_outgoing_call);
|
if (type == 2) return str + context.getString(R.string.local_outgoing_call);
|
||||||
return str + context.getString(R.string.missed_call);
|
return str + context.getString(R.string.missed_call);
|
||||||
|
@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.utils;
|
|||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.util.IOUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -27,18 +29,23 @@ public class OSUtil {
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public static boolean isMIUI() {
|
public static boolean isMIUI() {
|
||||||
|
File file = new File(Environment.getRootDirectory(), "build.prop");
|
||||||
|
FileInputStream fis = null;
|
||||||
try {
|
try {
|
||||||
|
fis = new FileInputStream(file);
|
||||||
String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
|
String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
|
||||||
String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
|
String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
|
||||||
String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
|
String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
|
||||||
Properties prop = new Properties();
|
Properties prop = new Properties();
|
||||||
prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));
|
prop.load(fis);
|
||||||
|
|
||||||
return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
|
return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
|
||||||
|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
|
|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
|
||||||
|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
|
|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
return false;
|
return false;
|
||||||
|
} finally {
|
||||||
|
IOUtils.close(fis);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,10 +33,10 @@ import java.util.UUID;
|
|||||||
|
|
||||||
@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "CommentedOutCode", "SynchronizeOnNonFinalField", "unused", "SameReturnValue"})
|
@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "CommentedOutCode", "SynchronizeOnNonFinalField", "unused", "SameReturnValue"})
|
||||||
public class PhoneUtils {
|
public class PhoneUtils {
|
||||||
|
private static final String TAG = "PhoneUtils";
|
||||||
static Boolean hasInit = false;
|
static Boolean hasInit = false;
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
static Context context;
|
static Context context;
|
||||||
private static final String TAG = "PhoneUtils";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造类
|
* 构造类
|
||||||
@ -539,16 +539,17 @@ public class PhoneUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人
|
String[] columns = {CallLog.Calls.CACHED_NAME, //通话记录的联系人
|
||||||
, CallLog.Calls.NUMBER// 通话记录的电话号码
|
CallLog.Calls.NUMBER, //通话记录的电话号码
|
||||||
, CallLog.Calls.DATE// 通话记录的日期
|
CallLog.Calls.DATE, //通话记录的日期
|
||||||
, CallLog.Calls.DURATION// 通话时长
|
CallLog.Calls.DURATION, //通话时长
|
||||||
, CallLog.Calls.TYPE// 通话类型
|
CallLog.Calls.TYPE, //通话类型
|
||||||
, CallLog.Calls.PHONE_ACCOUNT_ID
|
(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N ? CallLog.Calls.VIA_NUMBER : ""), //来源号码
|
||||||
|
"simid" //卡槽ID
|
||||||
};
|
};
|
||||||
|
|
||||||
CallInfo callInfo;
|
CallInfo callInfo;
|
||||||
Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null,
|
Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, columns,
|
||||||
CallLog.Calls.NUMBER + " like ?",
|
CallLog.Calls.NUMBER + " like ?",
|
||||||
new String[]{phoneNumber + "%"}, CallLog.Calls.DEFAULT_SORT_ORDER);
|
new String[]{phoneNumber + "%"}, CallLog.Calls.DEFAULT_SORT_ORDER);
|
||||||
Log.i(TAG, "cursor count:" + cursor.getCount());
|
Log.i(TAG, "cursor count:" + cursor.getCount());
|
||||||
@ -561,7 +562,8 @@ public class PhoneUtils {
|
|||||||
cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期
|
cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期
|
||||||
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)),//获取通话时长,值为多少秒
|
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)),//获取通话时长,值为多少秒
|
||||||
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型:1.呼入2.呼出3.未接
|
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型:1.呼入2.呼出3.未接
|
||||||
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID))
|
(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N ? cursor.getString(cursor.getColumnIndex(CallLog.Calls.VIA_NUMBER)) : null), //来源号码
|
||||||
|
cursor.getInt(cursor.getColumnIndex("simid")) //卡槽id
|
||||||
);
|
);
|
||||||
Log.d(TAG, callInfo.toString());
|
Log.d(TAG, callInfo.toString());
|
||||||
cursor.close();
|
cursor.close();
|
||||||
|
@ -41,7 +41,9 @@ public class SimUtil {
|
|||||||
//通过SubscriptionId获取卡槽信息ID
|
//通过SubscriptionId获取卡槽信息ID
|
||||||
public static int getSimIdBySubscriptionId(int subscriptionId) {
|
public static int getSimIdBySubscriptionId(int subscriptionId) {
|
||||||
try {
|
try {
|
||||||
|
Log.d(TAG, MyApplication.SimInfoList.toString());
|
||||||
for (PhoneUtils.SimInfo simInfo : MyApplication.SimInfoList) {
|
for (PhoneUtils.SimInfo simInfo : MyApplication.SimInfoList) {
|
||||||
|
Log.d(TAG, simInfo.toString());
|
||||||
if (simInfo.mSubscriptionId == subscriptionId) {
|
if (simInfo.mSubscriptionId == subscriptionId) {
|
||||||
return simInfo.mSimSlotIndex + 1;
|
return simInfo.mSimSlotIndex + 1;
|
||||||
}
|
}
|
||||||
|
5
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
5
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
|
</adaptive-icon>
|
@ -389,4 +389,5 @@
|
|||||||
<string name="tips_versions_inconsistent">The APP versions of the sender and the receiver are inconsistent, and cannot be cloned with one click!</string>
|
<string name="tips_versions_inconsistent">The APP versions of the sender and the receiver are inconsistent, and cannot be cloned with one click!</string>
|
||||||
<string name="tips_get_info_failed">Failed to get one-click clone information from sender</string>
|
<string name="tips_get_info_failed">Failed to get one-click clone information from sender</string>
|
||||||
<string name="linkman">Linkman:</string>
|
<string name="linkman">Linkman:</string>
|
||||||
|
<string name="via_number">Via Number:</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -388,4 +388,5 @@
|
|||||||
<string name="tips_versions_inconsistent">发送端与接收端的APP版本不一致,无法一键克隆!</string>
|
<string name="tips_versions_inconsistent">发送端与接收端的APP版本不一致,无法一键克隆!</string>
|
||||||
<string name="tips_get_info_failed">从发送端获取一键克隆信息失败</string>
|
<string name="tips_get_info_failed">从发送端获取一键克隆信息失败</string>
|
||||||
<string name="linkman">联 系 人:</string>
|
<string name="linkman">联 系 人:</string>
|
||||||
|
<string name="via_number">来源号码:</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user