web-dev-qa-db-ja.com

マシュマロのgetSerial()メソッド

私は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)を返すと、問題なく動作します。たぶん、クラス宣言と何か関係があるのでしょうか?

貴重なご協力をよろしくお願いいたします。エリー

5
SoundOfThunder

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権限があることを確認してください。そうしないと、アプリがクラッシュします。

許可を求めるために このチュートリアル を確認してください。

8
FAЯAƸ
 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を渡します。

4
Rohan

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

1
siva