Kivy A to Z -- 如何在Kivy中获取SD卡或者U盘的插拔事件

在Kivy中获取Android平台SD卡或U盘的插拔事件,可以通过监听本地socket client,接收vold服务发送的事件。事件路径为/dev/socket/vold,例如:'605 Volume sdcard /sdcard state changed...'。拔插SD卡时,会收到特定状态变化的消息。解析这些消息,可以识别挂载和卸载操作。遇到socket.AF_UNIX未定义的问题,需要修改pyconfig.h并重新编译Python。
摘要由CSDN通过智能技术生成

Kivy只是一个图形库,在Android平台上,有很多功能需要自己扩展,其中如何监听SD卡或者U盘的插拔事件就是一个问题。但是实际上解决起来也还是比较简单。


在Android平台上,用vold来替代linux下的udev来进行热插拔设备的管理。通过local socket server把热插拔设备的事件广播给正在监听的设备,所以要在Kivy中获取U盘或者SD卡的事件,只需要通过local socket client来监听vold的发送的事件,监听的路径为/dev/socket/vold,具体的实现方式如下:



import socket
import select

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect('/dev/socket/vold')
print 'start select!'
while True:
    ss = select.select([s,],[],[],20)
    data = s.recv(1024)
    for msg in data.split('\x00'):
        print msg

当接上SD卡时,会得到下面的打印:

'605 Volume sdcard /sdcard state changed from 2 (Pending) to 1 (Idle-Unmounted)'
'630 Volume sdcard /sdcard disk inserted (253:0)'
'605 Volume sdcard /sdcard state changed from 1 (Idle-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值