Ошибка 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:40:01 )
Последнее исправление: 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.

 введите описание изображения здесь>> </a> </p></body></html>

У меня возникла такая же проблема после периода, когда передача файлов работала хорошо. Но, после некоторых попыток, у меня есть причина; что файловая система устройства, показанная протоколом 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'ом.

Читайте также: