diff --git a/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/IccUtils.java b/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/IccUtils.java
old mode 100644
new mode 100755
index 3c2f1f3…2e6f44c
— a/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/IccUtils.java
+++ b/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/IccUtils.java
@@ -25,6 +25,12 @@ import android.telephony.Rlog;
import com.android.internal.telephony.GsmAlphabet;
import java.io.UnsupportedEncodingException;
+import android.provider.Settings;
+import android.content.Context;
+import android.util.Log;
+import android.os.SystemProperties;
+
+
/**
- Various methods, useful for dealing with SIM data.
*/
@@ -41,25 +47,90 @@ public class IccUtils {
*/
public static String
bcdToString(byte[] data, int offset, int length) {
- try {
-
String result = SystemProperties.get("net.ppp0.sim_ccid"); -
Log.i(LOG_TAG, "getSystemProperties: "+result);
+//ghijklmnopqrstuvwxyz
-
if (result.contains("g") || result.contains("h")|| result.contains("i")|| result.contains("j") || -
result.contains("k") || result.contains("l")|| result.contains("m")|| result.contains("n") || -
result.contains("o") || result.contains("p")|| result.contains("q")|| result.contains("r") || -
result.contains("s") || result.contains("t")|| result.contains("u")|| result.contains("v") || -
result.contains("w") || result.contains("x")|| result.contains("y")|| result.contains("z")){ -
String lowerIccid = LowercaseToString(data,offset,length); -
Log.i(LOG_TAG,"lowerIccid: " +lowerIccid); -
return lowerIccid; -
}else if (result.contains("G") || result.contains("H")|| result.contains("I")|| result.contains("J") || -
result.contains("K") || result.contains("L")|| result.contains("M")|| result.contains("N") || -
result.contains("O") || result.contains("P")|| result.contains("Q")|| result.contains("R") || -
result.contains("S") || result.contains("T")|| result.contains("U")|| result.contains("V") || -
result.contains("W") || result.contains("X")|| result.contains("Y")|| result.contains("Z")){ -
return HeightcaseToString(data,offset,length); -
}else{ -
//default -
Log.i(LOG_TAG, "iccid---default"); -
DefaultToString(data,offset,length); -
} -
int sim_iccid_status = SystemProperties.getInt("sim_iccid_status",0);//Settings.Global.getInt(mContext.getContentResolver(), "sim_iccid_status",0); -
//0 小写 1 大小 -
// Settings.Global.putInt(this.getContentResolver(),"sim_iccid_status",1); -
} catch (Exception e) { -
e.printStackTrace(); -
} -
return ""; -
}
-
public static String
-
DefaultToString(byte[] data, int offset, int length) {
StringBuilder ret = new StringBuilder(length*2);for (int i = offset ; i < offset + length ; i++) {
-
byte b; int v; v = data[i] & 0xf; -
if (v > 9) break; -
ret.append((char)('0' + v));
-
ret.append("0123456789abcdef".charAt(v)); v = (data[i] >> 4) & 0xf;
-
// Some PLMNs have 'f' as high nibble, ignore it -
if (v == 0xf) continue; -
if (v > 9) break; -
ret.append((char)('0' + v));
-
}ret.append("0123456789abcdef".charAt(v)); } return ret.toString(); - static String LowercaseToString(byte[] data, int offset, int length){
-
StringBuilder ret = new StringBuilder(length*2); -
for (int i = offset ; i < offset + length ; i++) { -
int v; -
v = data[i] & 35; -
ret.append("0123456789abcdefghijklmnopqrstuvwxyz".charAt(v)); -
v = (data[i] >> 4) & 35; -
ret.append("0123456789abcdefghijklmnopqrstuvwxyz".charAt(v)); -
} -
return ret.toString(); - }
- static String HeightcaseToString(byte[] data, int offset, int length){
-
StringBuilder ret = new StringBuilder(length*2); -
for (int i = offset ; i < offset + length ; i++) { -
int v; -
v = data[i] & 35; -
ret.append("0123456789ABCDEFGHIJKMNOPQRSTUVWXYZ".charAt(v)); -
v = (data[i] >> 4) & 35; -
ret.append("0123456789ABCDEFGHIJKMNOPQRSTUVWXYZ".charAt(v)); -
} -
return ret.toString(); - }
/**
* Decode cdma byte into String.
diff --git a/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/SIMRecords.java b/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/SIMRecords.java
old mode 100644
new mode 100755
index 4c93b21…bb6fc54
— a/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/SIMRecords.java
+++ b/android/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/SIMRecords.java
@@ -38,6 +38,10 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Arrays;
+import android.util.Log;
+import android.os.SystemProperties;
+
/**
- {@hide}
*/
@@ -863,8 +867,8 @@ public class SIMRecords extends IccRecords {
if (ar.exception != null) {
break;
}
-
mIccId = IccUtils.bcdToString(data, 0, data.length);
- log("initdata: " +Arrays.toString(data));
-
mIccId = SystemProperties.get("net.ppp0.sim_ccid");//IccUtils.bcdToString(data, 0, data.length); log("iccid: " + mIccId);
这篇博客介绍了如何解决在Android 6.0系统中Sim卡iccid获取不完整的问题,通过修改`IccUtils.java`和`SIMRecords.java`文件,利用`SystemProperties`和`Settings`进行修复。
1212

被折叠的 条评论
为什么被折叠?



