【问题标题】:How do you get the user defined "Device Name" in android?你如何在android中获得用户定义的“设备名称”?
【发布时间】:2013-05-23 02:16:33
【问题描述】:

我正在尝试获取设置中设置的用户定义设备名称。我已经尝试了几种选择,但到目前为止没有。

如果它有帮助或有伤害,我需要它在 BroadcastReceiver 中

谢谢

【问题讨论】:

    标签: java android


    【解决方案1】:

    这让我得到了我需要的东西...... http://cmanios.wordpress.com/2012/05/09/bluetooth-adapter-device-name-and-mac-address-in-android/

    BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
        String deviceName = myDevice.getName();
    

    确保添加

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

    到你的清单

    【讨论】:

    • 您可以接受自己的答案。由于从您的问题中猜测您在谈论蓝牙可能会很费力,因此我添加了一个标签并在标题中提及。
    • 在设置中,我使用的任何一台设备上都没有提到蓝牙。我一直在反复试验,直到找到它。
    • 好的,我回滚了我的编辑。但是您的解决方案表明该问题没有通用解决方案 - 在许多设备上,您尝试做的事情根本不可能,因为用户无法命名设备。
    • 请注意。由于此答案有效,如果您在设备设置中更新设备名称以获得更新的名称,您仍然需要重新启动设备。
    • 由于必须使用 BT 才能将手机与 Google Apps 一起提供,因此我们可以预期除亚马逊 Kindle 等少数设备之外的所有设备都具有 BT。android.stackexchange.com/questions/24464/…
    【解决方案2】:
    BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter();
    String deviceName = myDevice.getName();
    

    返回 Galaxy S5。

    String deviceName = android.os.Build.MODEL;
    returns SM-G900H.
    

    经过一番研究,我在 /data/data/com.android.providers.settings/databases/settings.db 中找到了 device_name

    所以,使用 shell 命令来获取它

    shell@k3g:/ $ settings get system device_name
    settings get system device_name
    Milky Way
    

    使用java

    String deviceName = Settings.System.getString(getContentResolver(), "device_name");
    returns Milky Way
    

    POC github 项目 https://github.com/kakopappa/getdevcicename

    详细解释: http://androidbridge.blogspot.com/2016/09/how-to-get-android-device-name-settings.html

    【讨论】:

    • 这返回了一个 null :(
    • 这将返回用户在设置中为其设备命名的内容:settings get global device_name 和 java 中的 Settings.Global.getString(getContentResolver(), "device_name");
    • 尽管已在手机的“设置”部分设置了值,但该 shell 命令在 Android P(像素)上返回“null”。
    • Settings.System 方法现在也返回“null”。
    • 感谢您提供此答案,将问题解释为有关设备的用户分配名称,而不是设备的型号名称。正如其他人所提到的,这里的任何方法似乎都不适用于我的 kindle(android 5.1.1)。它们以不同的方式返回 nullFireKFDOWI。嗯。 android docs 说 device_name 是在 API 级别 25 中添加的,这显然意味着 Fire OS 6,所以我想这是有道理的。有点。为什么settings get global device_name 会返回任何东西呢?
    【解决方案3】:

    总之,检索用户自定义设备名称没有单一一致的方法。

    但是,您可以使用许多适用于不同型号和制造商的实用程序:

    1. Settings.System.getString(getContentResolver(), “bluetooth_name”); (docs)
    2. Settings.Secure.getString(getContentResolver(), “bluetooth_name”); (docs)
    3. BluetoothAdapter.getDefaultAdapter().getName(); (docs)
    4. Settings.System.getString(getContentResolver(), “device_name”); (docs)
    5. Settings.Secure.getString(getContentResolver(), “lock_screen_owner_info”); (docs)

    在我同事测试的设备上,1、2 和 3 似乎是最可靠的。以下是他的完整分析:

    来源:https://medium.com/@pribble88/how-to-get-an-android-device-nickname-4b4700b3068c

    【讨论】:

    • 不幸的是,这些方法都不适用于 Pixel 2 XL 模拟器 (api 28)。他们都返回null!
    【解决方案4】:

    以下作品适合我

    String deviceName = Settings.Global.getString(<Context>.getContentResolver(), Settings.Global.DEVICE_NAME);
    

    【讨论】:

    • 不适用于华为。我想获取设备的用户自定义名称
    • 需要 API 级别 25 - 但在具有此级别或更高级别的设备上,这似乎是最可靠的选择
    【解决方案5】:

    这个在 API 25 上为我工作:

    Settings.Secure.getString(getContentResolver(), "bluetooth_name");
    

    这里是如何找到它...(只需替换您的设备名称)

    $ adb shell
    $ settings list system | grep "<device_name>"
    $ settings list secure | grep "<device_name>"
    

    【讨论】:

    • 在我的macOS ADB(1.0.36)版本中,设置命令没有list选项,只有getput
    • 更正:我便宜的 LG tracfone 上的 settings shell 命令没有 list 选项。
    • 只是为了添加另一个变体,我的三星 J2 在全局设置中有设备名称。 settings list global | grep "&lt;device_name&gt;"
    【解决方案6】:

    用途:

    String deviceName = android.os.Build.MODEL;
    

    【讨论】:

    • 感谢文章,但这只会给我手机 (SAMSUNG-SGH-I337) 名称,而不是我在设置->关于设备->设备名称中设置的名称。
    • 到目前为止我已经尝试过:System.getProperty("net.hostname");和 android.os.Build.MODEL;
    • 不要指望三星遵循谷歌设定的相同标准。他们可能会以自己的方式做事。
    • 这在另一台设备(非三星)上是一样的,这只是给了我实际的型号,而不是用户定义的设备名称。
    • 请注意,即使有“设置->关于->设备名称”也是供应商自定义,而不是 Android 本身的一部分。
    【解决方案7】:

    上述方法均不适用于所有设备。如果您想要一种在几乎所有 Android 设备(包括电视)上获取用户定义的设备名称且不需要任何权限的可靠方法,请使用此方法

    String userDeviceName = Settings.Global.getString(getContentResolver(), Settings.Global.DEVICE_NAME);
    if(userDeviceName == null)
        userDeviceName = Settings.Secure.getString(getContentResolver(), "bluetooth_name");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2012-02-04
      相关资源
      最近更新 更多