Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getSerial()不返回实际序列号或IMEI_Android_Uniqueidentifier - Fatal编程技术网

Android getSerial()不返回实际序列号或IMEI

Android getSerial()不返回实际序列号或IMEI,android,uniqueidentifier,Android,Uniqueidentifier,我想这是可行的,但是来自getSerial()请求的数据并不准确 结果与我的设备的“关于”部分中的任何内容都不匹配 我需要这些信息来帮助我的最终用户在打电话到我们的帮助台时-他们需要通过序列号识别他们的设备 有没有办法将getSerial()转换为实际的序列号 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> String serialNumber; serialNumber = androi

我想这是可行的,但是来自getSerial()请求的数据并不准确

结果与我的设备的“关于”部分中的任何内容都不匹配

我需要这些信息来帮助我的最终用户在打电话到我们的帮助台时-他们需要通过序列号识别他们的设备

有没有办法将getSerial()转换为实际的序列号

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

String serialNumber;
serialNumber = android.os.Build.getSerial();

字符串序列号;
serialNumber=android.os.Build.getSerial();
有人知道如何获取实际信息吗

TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();
getSystemService是活动类中的一个方法。getDeviceID()将返回设备的MDN或MEID,具体取决于手机使用的无线电设备(GSM或CDMA)


每个设备都必须在此处返回唯一的值(假设它是电话)。这应该适用于任何带有sim卡插槽或CDMA无线电的Android设备。你可以独自使用Android驱动的微波炉;-)

事实证明,获取唯一的硬件标识符变得越来越困难,因此最好围绕无法访问此类信息来规划应用程序,而是创建自己的应用程序

我阅读了很多文章,测试了很多代码示例,最终偶然发现了这个gem,发现它非常有用:

创建一个名为Installation的类:

public static class Installation {
    private static String sID = null;
    private static final String INSTALLATION = "INSTALLATION";

    public synchronized static String id(Context context) {
        if (sID == null) {
            File installation = new File(context.getFilesDir(), INSTALLATION);
            try {
                if (!installation.exists())
                    writeInstallationFile(installation);
                sID = readInstallationFile(installation);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        return sID;
    }

    private static String readInstallationFile(File installation) throws IOException {
        RandomAccessFile f = new RandomAccessFile(installation, "r");
        byte[] bytes = new byte[(int) f.length()];
        f.readFully(bytes);
        f.close();
        return new String(bytes);
    }

    private static void writeInstallationFile(File installation) throws IOException {
        FileOutputStream out = new FileOutputStream(installation);
        String id = UUID.randomUUID().toString();
        out.write(id.getBytes());
        out.close();
    }
}
在应用程序中需要唯一ID的任何位置—只需调用此项即可获得该ID—或第一次创建该ID:

    //INSTALLATION ID
    String installID =  Installation.id(this);
    Log.w("INSTALLATION_ID", installID);
超级容易
如果您需要或希望将应用程序安装中独有的任何其他内容保存到同一位置,则可以进行扩展。

太棒了!你知道像平板电脑这样只有WiFi的设备吗?它们有一个序列号-但没有任何内容与getSerial()返回的内容匹配。。。我希望得到真正的设备序列号number@EdKuhner看看这个。如果它有效,请接受我的回答。蒙塔西尔-你有没有机会告诉我这段代码到底在做什么?我并没有真正了解它是如何使用Class.forname和c.getmethod构建的-这里发生了什么?只需要使用该方法。他有自己的课,你不必跟着学@Edkuhneral虽然我在硬件标识符方面的经验有限,但对于Android的最新版本来说,获取它们越来越困难,我预计谷歌将保持这一趋势。也许您可以查看以下文档,看看是否有有用的东西: