私はJavaとAndroidで、基本的にデバイスからハードウェアのシリアル番号を取得する必要があります。次のことを試しました。
import Android.content.*;
import Android.os.Build;
public static String recup_Android()
{
String androidid;
String SerialNumber;
androidid=Android.os.Build.MODEL;
SerialNumber=Android.os.Build.getserial;
return SerialNumber;
}
次のエラーが発生します:Java:40:エラー:シンボルが見つかりません
SerialNumber=Android.os.Build.getserial;
^
シンボル:変数getserialの場所:クラスビルド1エラー:compileDebugJavaWithJavac FAILED
私はそこに何が欠けていますか? androidid(MODEL)を返すと、問題なく動作します。たぶん、クラス宣言と何か関係があるのでしょうか?
貴重なご協力をよろしくお願いいたします。エリー
GetSerialを誤って使用しています。そのメソッドは可変ではなく、API26以降から利用できます。古いバージョンの場合は、_Build.SERIAL
_を使用します
_if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
// Todo Don't forget to ask the permission
SerialNumber = Build.getSerial();
}
else
{
SerialNumber = Build.SERIAL;
}
_
getSerial()
を呼び出す前に、READ_PHONE_STATE権限があることを確認してください。そうしないと、アプリがクラッシュします。
許可を求めるために このチュートリアル を確認してください。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && PermissionsUtility.checkPermission
(PermissionsUtility.PHONE_STATE_PERMISSION, getActivity())) {
SerialNumber = Build.getSerial();
} else {
SerialNumber = Build.SERIAL;
}
最善の方法は、既にユーザーに許可を求めている場合でも、Build.getSerial()を呼び出す前に許可チェックで囲むことです。これはクリーンな方法です。これはクラッシュせず、スムーズに機能します。マニフェストファイルに権限を追加したことを確認してください。ここで、PermissionsUtilityは、戻り値を返すパーミッションをチェックするためのユーティリティクラスです。
public static final String PHONE_STATE_PERMISSION =
Manifest.permission.READ_PHONE_STATE;
public static boolean checkPermission(String permission, Activity activity) {
return ContextCompat.checkSelfPermission(activity, permission) ==
PackageManager.PERMISSION_GRANTED;
}
これは、アプリに権限があるかどうかを確認するだけです。パーミッションでPHONE_STATE_PERMISSIONを渡します。
Android 9)では、ユーザーのプライバシーを保護するために、Build.SERIALは常に「UNKNOWN」に設定されています。
アプリがデバイスのハードウェアシリアル番号にアクセスする必要がある場合は、代わりにREAD_PHONE_STATE権限をリクエストしてから、getSerial()を呼び出す必要があります。
Build.getSerial()メソッドはAPI26から使用でき、READ_PHONE_STATEが必要です。
詳細については、次のリンクを参照してください: https://developer.Android.com/about/versions/pie/Android-9.0-changes-28