GNOME Bugzilla – Bug 678344
Rhythmbox fails to get storage info from locked Android 4.0 device using MTP
Last modified: 2012-06-27 19:56:03 UTC
Description: I have an Android device with Cyanogenmod 9 that uses MTP to transfer files. I have it configured so that after the screen is off for 15 seconds, the device locks and can only be unlocked with a correctly entered password. Whether the device is in the locked or unlocked state seems to affect whether or not certain MTP functions succeed. If the device is unlocked, then connected to Rhythmbox, MTP access and transfer works as expected. If the device is locked, then connected to Rhythmbox, only the name of the device can be retrieved. Rhythmbox can't get storage info or get track listings. Maybe this is by design on Android? Steps to Reproduce 1. Lock the Android device 2. Plug the device into an available USB port 3. Start Rhythmbox. Ensure that the MTP plugin is enabled 4. Click the entry labelled "Media Player" in the left hand browser 5. Wait until "Media Player" is replaced by the name of the device 6. Right click on the new device and click "Properties" Expected Results: The properties window will display an accurate measurement of how much space is available and what kinds of media files are present. Furthermore, the music browser list on the right hand side is populated with the track names on the device. Received Results: The properties window displays, but is empty. The music browser list is empty. When "rhythmbox --debug" is run from a terminal, the following message appears: PTP_ERROR_IO: failed to open session, trying again after resetting USB interface LIBMTP libusb: Attempt to reset device Android device detected, assigning default bug flags (rhythmbox:5813): Rhythmbox-WARNING **: libmtp error: Get Storage information failed. (rhythmbox:5813): Rhythmbox-WARNING **: libmtp error: PTP Layer error 02fe: get_handles_recursively(): could not get object handles. (rhythmbox:5813): Rhythmbox-WARNING **: libmtp error: (Look this up in ptp.h for an explanation.) (13:41:31) [0x1834000] [queue_task] rb-mtp-thread.c:142: queueing task: get track list (13:41:31) [0x1834000] [run_task] rb-mtp-thread.c:619: running task: get track list (rhythmbox:5813): Rhythmbox-WARNING **: libmtp error: PTP Layer error 02fe: get_handles_recursively(): could not get object handles. (rhythmbox:5813): Rhythmbox-WARNING **: libmtp error: (Look this up in ptp.h for an explanation.) (13:41:31) [0x1834000] [get_track_list] rb-mtp-thread.c:424: No albums (13:41:31) [0xa31470] [device_opened_idle] rb-mtp-source.c:850: unknown libmtp filetype Folder supported (13:41:31) [0xa31470] [device_opened_idle] rb-mtp-source.c:850: unknown libmtp filetype Text file supported (13:41:31) [0xa31470] [device_opened_idle] rb-mtp-source.c:850: unknown libmtp filetype HTML file supported (rhythmbox:5813): Rhythmbox-WARNING **: libmtp error: PTP Layer error 02fe: get_handles_recursively(): could not get object handles. There is also another case: If the device is unlocked, connected to Rhythmbox, and re-locks after the storage info and track listings have been acquired, any previous track listings can still be accessed. However, Rhythmbox seems more prone to crash unpredictably in this state.
Yes, android does this deliberately. I don't see anything we could possibly do about it.
Can there be an error message indicating that the device needs to be unlocked to read from it?
If libmtp was capable of giving us that information, perhaps.
Some people are discussing this at the libmtp mailing list, but we need suggestions on how to detect it and how to report the condition.