相关疑难解决方法(0)

如何在Android 7.0+中检索SD卡的序列号?

在某些版本的Android和Linux的其他版本中,可以获取已安装SD卡的序列号,例如通过读取/sys/class/mmc_host/mmc0/mmc0:0001/serial或的内容/sys/block/mmcblk0/device/serial(特定数字可能会有所不同).在我的测试中,只要将SD卡插入内置SD卡插槽(不通过USB适配器安装),这就非常可靠.

但是从Android 7.0 Nougat开始,据说操作系统阻止访问这些信息,至少在某些设备上是这样.我通过在新的阿尔卡特A30 GSM(Android 7.0)上运行测试应用程序对此进行了测试,实际上上述方法失败并出现权限错误:

java.io.FileNotFoundException: /sys/block/mmcblk0/device/serial (Permission denied)
at java.io.FileInputStream.open(Native Method)
Run Code Online (Sandbox Code Playgroud)

为了将来参考,我们(从adb shell测试)具有ls -ld以下权限:

  • /sys/class/mmc_host 但不是 /sys/class/mmc_host/mmc0
  • /sys/block 但不是 /sys/block/mmcblk0

由于上述方法不再有效,

  • 有没有其他方法可以获得Android 7.0或更高版本中安装的SD卡的序列号?

  • 如果不这样做,谷歌是否有关于提供或不提供此功能的计划的任何文件或其他声明?我没有在Android 问题跟踪器中找到任何内容,但也许我没有找到正确的搜索引擎.

为了确保问题清楚,我正在谈论在非根设备上运行的普通(非系统)应用程序可以做什么,以及应用程序通常可以请求和接收的任何权限.

仅供参考,该/sbin目录似乎不可读,因此命令/sbin/udevadm不是一个选项.

android serial-number sd-card

23
推荐指数
2
解决办法
3406
查看次数

在Android上查找SD卡卷标

是否有可能找到插入Android设备的SD卡的卷标?

据我所知,Android设计只有一个"外部存储"(如返回Environment.getExternalStorageDirectory()),但有很多设备在内部将内部闪存作为"外部存储",并在其下安装SD卡或甚至更复杂的组合(见另一个问题).可以通过阅读来枚举这些附加设备/proc/mounts,但我们需要一些东西来识别用户.有没有机会获得他们的卷标?

我检查了Linux vfat驱动程序完全忽略了卷标签dentry,而且blkid从util-linux 读取了vfat本身.我还检查过,至少在我的设备上,SD卡的块设备有模式660和所有者root.root,所以我不能这样做.所以基本上它归结为是否有任何可以读取它的实用程序.

linux android android-sdcard

10
推荐指数
1
解决办法
6546
查看次数

在4.2.2及更高版本的操作系统中获取java.lang.NoSuchMethodError:android.os.FileUtils.getFatVolumeId

我在尝试获取SD卡ID时面临服务onCreate()的问题.使用来自src-external/android-core的android.os包的FileUtils类.

mCardId =
  FileUtils.getFatVolumeId(Environment.getExternalStorageDirectory().getPath());

崩溃日志:

12-31 19:55:25.804: E/AndroidRuntime(1235):
java.lang.NoSuchMethodError: android.os.FileUtils.getFatVolumeId 12-31
19:55:25.804: E/AndroidRuntime(1235):   at
cloudtv.android.cs.service.MediaPlaybackService.onCreate(MediaPlaybackService.java:198)
12-31 19:55:25.804: E/AndroidRuntime(1235):     at
android.app.ActivityThread.handleCreateService(ActivityThread.java:2572)
12-31 19:55:25.804: E/AndroidRuntime(1235):     at
android.app.ActivityThread.access$1800(ActivityThread.java:135) 12-31
19:55:25.804: E/AndroidRuntime(1235):   at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
12-31 19:55:25.804: E/AndroidRuntime(1235):     at
android.os.Handler.dispatchMessage(Handler.java:102) 12-31
19:55:25.804: E/AndroidRuntime(1235):   at
android.os.Looper.loop(Looper.java:136) 12-31 19:55:25.804:
E/AndroidRuntime(1235):     at
android.app.ActivityThread.main(ActivityThread.java:5017) 12-31
19:55:25.804: E/AndroidRuntime(1235):   at
java.lang.reflect.Method.invokeNative(Native Method) 12-31
19:55:25.804: E/AndroidRuntime(1235):   at
java.lang.reflect.Method.invoke(Method.java:515) 12-31 19:55:25.804:
E/AndroidRuntime(1235):     at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-31 19:55:25.804: E/AndroidRuntime(1235):     at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 12-31
19:55:25.804: E/AndroidRuntime(1235):   at
dalvik.system.NativeStart.main(Native Method)

提前致谢!

java crash service android nosuchmethoderror

2
推荐指数
1
解决办法
1402
查看次数