それは可能です。私はこのコードでそれを行います:
try {
@SuppressWarnings("rawtypes")
Class clazz = Class.forName(telephonyManager.getClass().getName());
Method m = clazz.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony it = (ITelephony) m.invoke(telephonyManager);
if (it.supplyPin("1234")) {
// SIM unlocked
} else {
// not unlocked
}
} catch (Exception e) {
//
}
そのためには、 ITelephonyインターフェイスが必要です。そのソースはこちらにあります。src フォルダーに com.android.internal.telephony パッケージを作成し、そこに iTelephony.java を配置します。このアプローチでは、*android.permission.MODIFY_PHONE_STATE* アクセス許可を使用します。これは、Android 2.2 までしか利用できません。バージョン 2.3 以降、この権限はシステム アプリに限定されています。そのコードを最新バージョンで使用する場合は、アプリケーションの apk ファイルを /data/app から /system/app フォルダーに移動する必要があります。