Мне нужно получить IMSI (International Mobile Subsriber Identity), хранящиеся на SIM-карте, с использованием кодового имени1. Также в случае двух или трех SIM-телефонов мне нужно получить IMSI для каждой SIM-карты. Пожалуйста, как мне это получить?
Ответ 1
Display.getMsisdn()
будет работать для некоторых устройств, но большинство из них не разрешает доступ к этой информации. Для получения дополнительной информации вы можете просто использовать собственный интерфейс, если вы можете получить к нему доступ таким образом.
Ответ 2
Другой способ получить IMSI для двойного устройства Sim:
Попробуйте это.. его работа для меня. Идея заключается в вызове службы для функции iphonesubinfo №3. вы получите результат как стоимость посылки, поэтому я использую getNumberFromParcel для извлечения числа.
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created by Apipas on 6/4/15.
*/
public class SimUtil {
public static String getIMSI_1() {
String imsiParcel = runCommand("service call iphonesubinfo 3");
String imsi = getNumberFromParcel(imsiParcel);
Log.d("apipas", "IMSI_1:" + imsi);
return imsi;
}
public static String getIMSI_2() {
String imsiParcel = runCommand("service call iphonesubinfo2 3");
String imsi = getNumberFromParcel(imsiParcel);
Log.d("apipas", "IMSI_2:" + imsi);
return imsi;
}
public static String runCommand(String src) {
try {
Process process = Runtime.getRuntime().exec(src);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[2048];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
// Waits for the command to finish.
process.waitFor();
return output.toString();
} catch (IOException e) {
Log.e("apipas", "IOException:" + e.getMessage());
return null;
} catch (InterruptedException e) {
Log.e("apipas", "InterruptedException:" + e.getMessage());
return null;
}
}
public static String getNumberFromParcel(String str) {
String res = "";
if (str != null && str.length() > 0) {
String lines[] = str.split("\n");
for (String line : lines) {
if (line == null || line.length() == 0)
continue;
String content[] = line.split("'");
if (content.length > 1) {
res += content[1].replace(".", "");
}
}
} else return "NA";
return res;
}
}
Затем вызовите эти статические методы, например:
String imsi1 = SimUtil.getIMSI_1();
String imsi2 = SimUtil.getIMSI_2();
Вам нужно будет установить это разрешение:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>