棉花糖上的getSerial()方法

时间:2017-11-20 10:47:39

标签: java android serial-number

我是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)它然后工作正常。 也许与类声明有关?

提前感谢您的宝贵帮助 埃利

3 个答案:

答案 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