Ошибка libmtp could not send object info ubuntu
Обновлено: 05.07.2024
у меня очень странная проблема с доступом к хранилищу на некоторых устройствах. Приложение работает на моих тестовых устройствах (Nexus 4 & 7, Samsung GS5). Все мои устройства под управлением Android 4.4.2. Но я получил много писем от пользователей, говорящих, что приложение не может писать в хранилище (ни внутреннее хранилище, ни sd-карта). Из файла журнала, полученного от отзывов пользователей, я вижу, что проблема заключается в следующем коде:
он выдает исключение в строке fStream = new FileOutputStream (filename, true); при создании FileOutputStream.
в AndroidManifest.xml у меня есть следующие объявленные разрешения:
Я подтвердил, что пользователи используют личное приложение на SD-карте. И что еще более странно, что он не может писать во внутреннюю память. Как это может произойти, если у меня есть разрешения на чтение и запись? Пользователи говорят, что они не подключают свои устройства на ПК в то время.
оказывается, я слишком часто вызываю open и close FileOutputStream, что в какой-то момент вызывает FileNotFoundException. Больше похоже на проблему с потоками.
я столкнулся с аналогичной проблемой некоторое время назад.
ваша проблема может быть в двух разных местах. Это либо то, как вы создаете файл для записи, либо ваш метод записи может быть ошибочным в том, что он зависит от телефона.
Если вы записываете файл в определенное место на SD-карте, попробуйте использовать переменные среды. Они всегда должны указывать на действительное местоположение. Вот пример записи в папку downloads:
Если вы запись файла во внутреннее хранилище приложения. Попробуйте следующий пример:
лично я полагаюсь на внешние библиотеки для обработки потоковой передачи в файл. Этот еще не подвел меня.
Я потерял данные слишком много раз на неудачной команде записи, поэтому я полагаюсь на известные и проверенные библиотеки для моей тяжелой работы.
Если файлы большие, вы также можете посмотреть на запуск ввода-вывода в фоновом режиме или использовать обратные вызовы.
Если вы уже используете переменные окружения, это может быть проблема с разрешениями. Ознакомьтесь с ответом Джастина Фидлера ниже.
для API 23+ вам нужно запросить разрешения на чтение/запись, даже если они уже есть в вашем манифесте.
в моем случае у меня был неправильный случай в
android.permission должно быть строчным, и каким-то образом вся строка была прописной в нашем источнике.
Я также столкнулся с той же проблемой. После тяжелой работы я понял, что в моем случае было не так. Мое устройство было подключено к компьютеру через USB-кабель. Существуют типы для USB-соединений, таких как массовое хранение, медиа-устройство(MTP), камера(PTP) и т. д. Мой тип соединения был - "массовое хранилище", и это вызывало проблемы. Когда я изменил тип соединения, проблема была решена.
всегда помните при доступе к файловой системе на устройстве android: -
НЕ ПОДКЛЮЧАЙТЕСЬ КАК МАССА Хранение на компьютере / ПК.
в моем случае это была проблема с разрешениями. Загвоздка в том, что на устройстве с Android 4.0.4 я получил доступ к файлу без каких-либо ошибок или исключений. И на устройстве с Android 5.1 это не удалось с исключением доступа (open failed: EACCES (разрешение отказано)). Обработал его с добавлением разрешения follow для манифеста файла:
поэтому я предполагаю, что это разница между управлением разрешениями в версиях ОС, которые вызывают сбои.
сначала дайте или проверьте разрешения, такие как
Если эти два разрешения в порядке, то проверьте, что выходные потоки находятся в правильном формате.
В моем случае я использовал параметр android:isolatedProcess="true" на service на AndroidManifest.xml .
как только я удалил его, ошибка исчезла.
я столкнулся с той же проблемой и обнаружил, что мне нужно запросить разрешения во время выполнения, даже если я объявил об этом в манифесте. Так же, как и ответ Джастина Фидлера.
моя реализация немного отличается от ответа Джастина Фидлера, что он также реализует метод onrequestpermissionsresult фрагмента v4 для ручка разрешений "запрос-ответ".
У меня такая же проблема, но Иногда самый сложный вопрос получает простой ответ.
я перепроверяю разрешения манифеста, и was_not пишет разрешение позор мне.
также я нашел решение для моего пути.
перед запуском приложения я предоставил root file-explorer и не отключил разрешение на запись / чтение при выходе из приложения.
мое приложение не может использовать внешнюю память, пока я делал устройство restrat для сброса всех разрешений.
Если клиенты используют Android 6.0, Android добавил новый модель разрешение for (зефир).
трюк: если вы нацелены на версию 22 или ниже, ваше приложение запросит все разрешения во время установки, как и на любом устройстве под управлением ОС ниже Marshmallow
в моем случае проблема заключалась в конфигурации WIFI, которая была статической, имела конфликт с другим устройством, использующим тот же IP-адрес.
в моем случае я забыл добавить / перед именем файла после добавления я избавился от него
Fedora 17, GNOME 3, libmtp 1.1.5, kernel 3.6.6.
Galaxy Nexus, проявляется и на стоковой прошивке, и на CM10, USB Debug дела не меняет.
Подключаю как MTP Device - в системе определяется, выбираю его в наутилусе, но список директорий появляется только секунд через 10. Просматривать/копировать/удалять файлы не получается, наутилус вываливает ошибки вроде:
1. Error creating directory: -1: Unspecified error
2. Error getting file: -6: Not Supported
Однако удается создать пустой текстовый файл, изменить и сохранить его содержимое. Также удалось переместить и заменить один файл другим в пределах памяти телефона.
dmesg ничего интересного не выдает.
Я со своим Huawei MediaPad поступил так: создал
/.local/bin/mtp_u. Содержимое скриптов в
Скрипты занёс в меню KDE с добавлением горячих клавиш и отключением отклика мыши.Естественно, сначала нужно сделать:
У тебя тоже MediaPad? Как же я мог не знать? Он у меня вообще никак не определяется. спасибо, попробую.
Но сомневаюсь, что с телефоном такие костыли будут уместны - ведь худо-бедно работает. Попробую в wheezy, вдруг это федоропроблема.
Последнее исправление: ArtKun 22.11.12 21:44:28 (всего исправлений: 1)
У меня Huawei MediaPad тоже никак не определяется, но вот такой способ работает. И да, у меня F18.
А вообще, насколько я понял, в базе libmtp MediaPad присутствует, а проблема в прикладных средствах.
// Кстати, мой способ работает с любым устройством MTP. Ну, по крайней мере, должен работать. Проверял ещё и на Samsung Galaxy Tab 3100.
carasin ★★★★★ ( 22.11.12 21:46:12 )Последнее исправление: carasin 22.11.12 21:50:01 (всего исправлений: 3)
Если интересно - wheezy ведет себя точь-в-точь как федора. Заодно заметил, что баг иксов с рандомным перескакиванием курсора в VirtualBox, пофикшенный в федоре еще летом, в дебиане во все поля. А еще gdm почему-то запускается в fallback-режиме. Осталось еще F18 потестить, а если уж и там ситуация не изменится - придется подставлять костыли :)
"Не удалось подключить Android-телефон «Невозможно открыть устройство MTP» [usb: 001,035] »«
Я могу делать все, что мне нужно, по FTP, но это смешно замедляет работу для больших файлов. Любая помощь, получая мой Android и ПК, чтобы говорить друг с другом, очень ценится.
Конфликт между Banshee и файловым менеджером (Nautilus), оба пытаются получить доступ к устройству. Поэтому, если вы хотите скопировать список воспроизведения на устройство, вы должны деактивировать все расширения, которые обращаются к вашему устройству, в настройках Banshee's.
Затем откройте музыкальную папку вашего устройства в Nautilus и скопируйте /вставьте свои плейлисты из Banshee в окно Nautilus.
Это сработало для меня с Ubuntu 14.04 + Jolla с ОС Sailfish.
У меня была такая же проблема, но просто закрытие Банши разрешило ее. Убедитесь, что у вас нет других программ, которые в настоящее время обращаются к устройству.
Вы также можете использовать:
вам нужны драйверы ADB , установленные на вашем компьютере. Вы также должны включить USB debugging в developer options на вашем устройстве.
Чтобы включить параметры разработчика, перейдите к: Настройки > О телефоне > Коснитесь Строка-номер 7 раз. (Enabled)
Затем вернитесь к настройкам , вы найдете параметры разработчика прямо над О телефоне . Здесь вы найдете USB-отладку .
Когда вы включите это и подключите свое устройство к компьютеру, он попросит вас предоставить разрешение на использование вашего компьютера с помощью клавиши RSA ( поставьте галочку перед тем, как принять ее, чтобы разрешить ее использовать).
Это для меня еще быстрее, чем просто копирование файлов, как обычно.
Такая же проблема. Тысячи всплывающих окон и окон архивирования файлов будут продолжать поступать, как только я подключу свой телефон. Я решил это, выбрав «Камера (PTP)» в своем телефоне вместо «Медиа-устройство (MTP)», нажав на уведомление USB.
У меня возникла такая же проблема после периода, когда передача файлов работала хорошо. Но, после некоторых попыток, у меня есть причина; что файловая система устройства, показанная протоколом mtp на компьютере, некорректно синхронизирована с реальным: не отображает файл /директор, который физически существует на устройстве , и создание /переименование эта же сущность в файловой системе вызывает эту ошибку. Решение: держите вручную (приложение-проводник) файловую систему в том же состоянии представленного.
/.mtpz-data for reading, MTPZ disabled.
Device 0 (VID=12d1 and PID=107e) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team
ignoring libusb_claim_interface() = -6PTP_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
После этого resetting'а и наутилус не может ничего прочитать:
Sorry, could not display all the contents of “Internal storage”:
libmtp error: could not get object handles.
После этого приходится в телефоне отключить файловый режим, потом включить обратно, и тогда наутилус опять нормально работает, а jmtpfs нет.
Как бы этот MTP смонтировать?
Upd: проблему удалось разрешить очень странными способами.
В Debian8 попробовал запустить jmtpfs несколько раз от рута, а не от простого юзера. Сначала вылезала та же самая ошибка, а потом всё же смонтировалось. Ещё несколько раз повыключал/повключал MTP в самом телефоне, повытыкал/повтыкал USB-кабель, но монтирование продолжало работать. А потом и от простого юзера тоже стало успешно работать. Хотя после запуска jmtpfs наутилус уже ничего не видит. Не понимаю, что там сегодня поменялось.. Систему точно не обновлял.
В Debian9 попробовал то же самое, но не сработало. Тогда разлогинился из X11, зашёл в текстовый терминал, а там jmtpfs таки сработал.
Потом залогинился обратно в иксы, а в тамошнем терминале при попытке ls phone/ вылезла ошибка вводе-вывода. И в текстовом терминале тоже.
Короче, оказалось, что там доступ возможен только от одного клиента - либо через jmtpfs, либо в оконном менеджере. Причём оконный менеджер подцепляет MTP по умолчанию, запуск наутилуса на это не влияет, он просто позволяет посмотреть в уже подмонтированный телефон. Но jmtpfs уже не работает.
А вот если его телефон после подключения к компьютеру сначала отмонтировать в оконном менеджере тем же наутилусом - в смысле, не eject, а просто umount, то после этого можно его подмонтировать jmtpfs'ом.
Читайте также: