我是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;
^
symbol:变量getserial location:class Build 1错误 :compileDebugJavaWithJavac FAILED
我在那里错过了什么? 如果我返回androidid(MODEL)它然后工作正常。 也许与类声明有关?
提前感谢您的宝贵帮助 埃利
答案 0 :(得分:6)
您正在错误地使用getSerial。它的方法不可变,可从API 26或更高版本获得。对于旧版本,请使用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 权限。否则你的应用程序将崩溃。
检查this tutorial是否有权请求。
答案 1 :(得分:2)
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。
答案 2 :(得分:0)
在Android 9中,Build.SERIAL始终设置为“未知”以保护用户的隐私。
如果您的应用需要访问设备的硬件序列号,则应请求READ_PHONE_STATE权限,然后调用getSerial()。
Build.getSerial()方法可从API26使用,并且需要READ_PHONE_STATE。
要获取更多信息,请参阅以下链接:https://developer.android.com/about/versions/pie/android-9.0-changes-28