Androidの新しいバージョン(特にAndroid 8.0以降)では、デバイスのIMEI(国際移動体装置識別番号)を取得するためのAPIが変更されています。以前のgetDeviceId()は非推奨となり、API Level 26以上ではgetImei()メソッドの使用が必須となります。以下に、必要なパーミッションの設定と実装コードを示します。
パーミッションの設定
電話の状態へのアクセス権限をマニフェストファイルに追加します。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
この権限は、端末の情報を読み取るために不可欠です。
IMEI取得の実装
実際のJavaコードによる実装例です。ランタイムパーミッションの確認を行い、権限がある場合のみTelephonyManagerを通じてIMEIを取得します。変数名や構造を整理し、可読性を高めた形にしています。
public String retrieveDeviceImei(Context appContext) {
TelephonyManager telMgr = (TelephonyManager) appContext.getSystemService(Context.TELEPHONY_SERVICE);
// パーミッションの確認
int permissionCheck = ContextCompat.checkSelfPermission(appContext, Manifest.permission.READ_PHONE_STATE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
// パーミッションが未付与の場合は処理を中断またはリクエストを実行
return null;
}
// Android 8.0 (API 26) 以上の場合の処理
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
try {
return telMgr.getImei();
} catch (SecurityException e) {
e.printStackTrace();
}
}
return null;
}
上記のコードでは、ContextCompat.checkSelfPermissionを使用して実行時の権限チェックを行っています。APIレベル26以上であることを確認した上でgetImei()を呼び出すことで、互換性とセキュリティを確保しています。