Як я можу передавати фотографії на свій пристрій Android Jelly Bean, зберігаючи оригінальну мітку часу?


25

Нещодавно я придбав Nexus 4 і хотів би передати свої фотографії свого попереднього пристрою на нього. Мій попередній телефон Android використовував стандартний USB-накопичувач, який створював 0 проблем при копіюванні матеріалів назад, але Nexus 4, як і багато інших сучасних телефонів Android, натомість використовує MTP, що має цікаву особливість відмови від копіювання оригіналу дати / часові позначки файлів, використовуючи натомість дату копіювання файлів.

Це, очевидно, величезний облом, що стосується фотографій; не тільки тому, що не можна перевірити початкову дату, в яку було зроблено знімок під час перегляду по телефону, а й тому, що вони закінчуються повністю несортованими.

Чи є спосіб перенести фотографії на телефон Jelly Bean Android, який не підтримує масове зберігання USB, зберігаючи оригінальні часові позначки?

Що я спробував досі:

  • Передача через USB MTP
  • ADB push (як повні папки, так і окремі файли)
  • Передача через SSH (за допомогою SSHDroid + WinSCP)
  • Завантаження та завантаження з Dropbox
  • Передача ZIP-файлу через MTP та розпакуйте файл на телефоні
  • Передача з іншого телефону через Bluetooth
  • Функція QuickPic "виправити дату"
  • Локальна синхронізація
  • Виправлення дати фотографії
  • FTPSyncX
  • Сигнали диму
  • Кричить на телефон

Жоден із них не зберіг позначку часу, і це зводить мене з розуму.

(Крім того, я ще не вкоренився, але якщо єдиний життєздатний спосіб вимагає кореня, я також вітаю цю відповідь.)


Чи підтримує Android знімання файлів .tar? Якщо так, можливо, ви можете скопіювати .tar файл із зображень. Я не знаю, змінив би відмінювання часової позначки окремих файлів чи ні.
Шанс

@Chance пробував це раніше, але не допомагав; Проблема полягає в тому, що нічого не має привілеїв писати часову позначку за замовчуванням, тому зараз нічого не можна зробити, окрім вкорінення.
Ман

Також всім, хто звучав у цьому питанні: Дякую. Як працюють сайти SE, я можу прийняти лише одну відповідь, але кожна відповідь тут допомагала тим чи іншим чином.
Ман

Відповіді:


10

Ви не можете, це поточна проблема з дозволом ( тут є повідомлення про помилку про ) для папки Android 4.0 + s / sdcard, якщо вона не використовує FAT32 (але FUSE).

Причина: Існує перехід від FAT32 до уніфікованого користувальницького сховища як для додатків, так і для медіа-даних (за допомогою ext4) в одній файловій системі.

Нам набридло бачити, що OEM-виробники містять багато ГБ внутрішньої пам’яті для музики, тоді як у користувачів все ще не вистачає місця для додатків та даних. Такий підхід дозволяє нам об'єднати все в одному томі, що набагато краще.

- Ден Моррілл, інженер Android в Google

Старі властивості FAT32 емулюються за допомогою шару FUSE для сумісності з існуючими програмами. Також: / data / та / sdcard на пристроях Google, починаючи з Nexus 7, використовується лише один розділ (/ data / media представляє вміст "sdcard" і піддається застосуванню за допомогою шару FUSE для додатків).

Ось реалізація CyanogenMod драйвера FUSE, якщо вам цікаво бачити джерело. Схоже, встановлення атрибутів часових позначок реалізовано.

EDIT: Він працює лише з root.

Точна причина: усі файли належать root.sdcard_rw (див. Тут ).

Абонент, що не має uid = 0, не може викликати syscall utimensat () , він не працює в рівні VFS (EPERM) для часових міток, відмінних від поточних:

  1. ефективний ідентифікатор користувача абонента повинен відповідати власнику файлу; або
  2. абонент повинен мати відповідні привілеї.

Щоб внести будь-які зміни, окрім встановлення обох часових позначок на поточний
час (тобто, час не NULL, і обидва поля
tv_nsec не UTIME_NOW, і обидва поля tv_nsec не UTIME_OMIT),
має застосовуватися або умова 2, або 3 вище.


Дякуємо за інформацію, сподіваємось, що це щось, що може і хотів би вирішити Google, оскільки, наскільки я можу сказати, проблема полягає не в шарі запобіжника або протоколі mtp, а в суворих привілеях, які були встановлені там, які Спосіб здається досить недавнім (4.2.1?), оскільки додаток для виправлення дат фотографії, розміщений нижче, начебто працював із старими пристроями на базі 4.0 з запобіжниками / mtp, такими як галактика Nexus.
Ман

2
Оновлення для майбутніх читачів: це залишається невиправленим у 4.2.2.
Ман

2
Оновлення для ще більше майбутніх читачів: нефіксований у 6,0 зефіру.
Ман

6

Нещодавно я натрапив на цю проблему на Nexus 5 і спробував більшість рішень, перерахованих тут, не пощастило. У моєму випадку, схоже, це спричинено розпізнаною помилкою з акційним Android ( джерело ).

Моє рішення було наступним - я використовував Windows 8.1, але немає причин, що це не працюватиме на OSX / Linux (однак на пристрої потрібен root).

  1. На своєму ПК створіть .tar.gz архів усіх файлів, які ви хочете перенести.

    • Для цього я використав 7zip - Варто згадати в Windows, спочатку потрібно створити архів .tar, а потім застосувати стиснення .gz.
  2. Перенесіть архів на пристрій за допомогою FTP, переконуючись, що використовується команда MFMT.

    • FTP-сервер підтримує MFMT на стороні пристрою. Просто встановіть і ввімкніть, не потрібна додаткова конфігурація.
    • На ПК я використовував Filezilla - вам потрібно забезпечити Передача> Зберегти часові позначки переданих файлів .
  3. На пристрої витягніть архів у оболонці як корінь.

    • Використовуючи термінальний емулятор , спочатку переконайтеся, що у вас є кореневий доступ, використовуючиsu команди. Можливо, вам доведеться надати доступ, якщо з'явиться SuperSU.
    • Перейдіть до каталогу, що містить архів .tar.gz, командою cd, наприклад: cd /sdcard/
    • Витягніть архів за допомогою наступного: tar -xvf ARCHIVE_NAME_HERE.tar.gz
    • Примітка. Чомусь, коли я витягувався безпосередньо в DCIM/Cameraкаталог, фотографії взагалі не відображатимуться в додатку галереї. Якщо це трапляється з вами, я пропоную вам витягнути його в інший каталог, а потім перемістити (не копіювати) файли до каталогу камери. Я підозрюю, що це викликано проблемою дозволів. Для переміщення файлів можна використовувати термінал або обраний вами файловий менеджер.
  4. Перезавантажте для гарної міри.

Це дозволило всім атрибутам «змінити дату» файлів залишатися недоторканими, а всі фотографії залишилися у правильному порядку при перегляді в додатку галереї.


Вони не з’являються в галереї через медіа-індекс. Він не розпізнає вашу роботу терміналу, але якщо ви використовуєте програму управління файлами, він повідомляє про нові переміщені файли до індексу, і тепер вони знайдені знову. Ви впевнені, що частина ftp дійсно потрібна? Цікаво, тому що ftp не може змінювати файли, які знаходяться всередині tar, тому чому це має бути важливо?
mgutt

@mgutt Я думаю, ви праві, що частина FTP не потрібна. Я збирав деталі інформації з інших рішень для пропозицій, і це було те, що закінчилося для мене!
rmorrin

4

Перевірте дані EXIF ​​і перевірте, чи є там часова марка.

Якщо є, Корекція дати фотографії дозволить вам замінити часову позначку файлу підключеного файлу EXIF, що поверне правильне сортування.


Нічого. Дані EXIF ​​є, і додаток, про який повідомляється, успішно змінив часові позначки, коли я ним користувався, але вони залишилися колишніми; Я перезавантажив і видалив кеш галереї, але це не допомогло. Чи потрібно додатку root? Схоже, на часових позначках був якийсь захист від запису, який нічого не в змозі подолати.
Ман

4

Це питання, яке мене дуже сильно турбує, коли я стикаюся з пристроями, які мають лише MTP, але не режим масового зберігання. Я також маю побоювання з цього приводу з абсолютно однаковими причинами з Маном.

Після деяких тестувань я знайшов тимчасове рішення, яке, можливо, здатне зберегти часову позначку.

Він використовує зовнішній зчитувач sdcard / OTG карт, а також команду cp з -a часовою міткою зможе зберегти. Але вимога полягає в тому, що телефон потрібно вкорінювати.

  1. Спочатку скопіюйте дані на SDcard.
  2. Прочитайте його за допомогою гнізда картки пам'яті / зчитувача карт OTG
  3. використовувати оболонку adb та отримати дозвіл root (su)
  4. cp -a * дані з карти до внутрішньої пам'яті.

4

Як було сказано в іншій відповіді, на пристроях, які використовують FUSE для емуляції SD-карти (наприклад, сучасні пристрої Nexus), тільки root може змінювати часові позначки файлів у /sdcard. Оскільки такі речі, як MTP та ADB, не виконуються як корінь, ви не можете зберегти часові позначки цими методами. Однак якщо ваш пристрій укорінений, ви можете виправити часові позначки окремим кроком після цього.

Під час відновлення повної резервної копії /sdcardз ПК на Linux на планшетному ПК я використовував цю команду, щоб виправити всі часові позначки після завантаження файлів за допомогою adb push:

find . | while read file; do timestamp_stat=$(stat -c "%y" "$file"); timestamp=$(date +"%Y%m%d.%H%M%S" -d "$timestamp_stat"); echo "$timestamp: $file"; adb shell su -c "touch -t $timestamp \"/sdcard/$file\""; done

Це слід запустити з кореня каталогу на ПК, який відповідає /sdcardна пристрої. (Або, якщо ви завантажили щось інше, ніж повну /sdcardрезервну копію, змініть шлях у touchкоманді ближче до кінця. Але слід запустити це з будь-якого каталогу на ПК, який відповідає каталогу в touchкоманді.)

Як це працює, це те, що він проходить через усі файли на стороні ПК, отримує часову позначку кожного та виконує touchкоманду як корінь на пристрої, щоб встановити там часову позначку відповідного файлу.

Зауважте, що для цього буде запущена окрема suкоманда для кожного окремого файлу. Якщо у вашій кореневій програмі увімкнено ведення журналу (наприклад, SuperSU), можливо, ви захочете відключити це, щоб уникнути створення великої кількості записів журналу. І якщо у вас налаштовано пристрій для запиту на підтвердження кожного suзапиту, ви, ймовірно, захочете це змінити тимчасово. (Можливо, можна придумати варіацію, яка передає потік touchкоманд в єдину кореневу оболонку пристрою, але прямолінійний спосіб цього не спрацював, коли я спробував це, і я не хотів витрачати багато часу на це.)

Я успішно використовував це на Nexus 10 під керуванням Android 5.1.


2

У мене точно таке питання. Схоже, його блокують запобіжник на Nexus 4, що працює Stock JellyBean 4.2.1.

SYMLINKS:
/sdcard -> /storage/emulated/legacy
/storage/emulated/legacy -> /mnt/shell/emulated/0

MOUNT POINT:
/mnt/shell /dev/fuse /mnt/shell/emulated fuse \
    rw,nosuid,nodev,relatime,user_id=****,group_id=****,default_permissions,allow_other 0 0

Ця інформація була взята через сеанс оболонки adb; Я припускаю, що запобіжник буде поєднуватися для всіх облікових записів на рівні додатків.

TL; DR З вигляду це неможливо зробити без вкорінення телефону.


1
Наразі моє «рішення» - завантажувати фотографії з минулих телефонів одна за одною в хронологічному порядку, з паузами між ними, в інший каталог. Ось сценарій оболонки Linux, який я використовую: [old_pictures]$ for f in $(ls -1 * | sort -t _ -k 2); do adb push $f /storage/sdcard0/DCIM/Past/; sleep 3; done; Якщо ви йдете цим маршрутом, спочатку проведіть тестове завантаження, щоб бути впевненим, що ви задоволені. Крім того, відключіть функцію "Мобільне завантаження Google+", поки ви перебуваєте в ньому, щоб не отримати "подвійних завантажень".
Черепаха

Спасибі, що допомагає; як ваш сценарій: як mtp через Windows, так і adb push перестаньте з'єднання для мене після першої тисячі файлів або так у моєму випадку, а також деякі файли випадково виявляються пошкодженими, ви бачите те саме? в основному, як описується ця проблема тут: code.google.com/p/android/isissue/detail?id=35185 (можливо, я повинен поставити окреме запитання, оскільки це не пов'язане безпосередньо із самими часовими позначками. Хоча, маю любов mtp),
Ман

2

Якщо ви використовуєте додаток Google Photo, і хочете, щоб ваш файл був перелічений у потрібному порядку, є рішення.

Передумови випуску

Це Android Bug. Це не дозволяє користувачеві, що не має права доступу до кореня, змінювати дату модифікації файлів ( https://code.google.com/p/android/isissue/detail?id=18624 з моменту впровадження багатокористувацької / пісочниці з файловою системою FUSE) . І не зберігає часову позначку під час копіювання файлів за протоколом MTP ( https://code.google.com/p/android/isissue/detail?id=92635 ).

Рішення для користувачів Google Photo

Фотографії впорядковуються за допомогою інформації EXIF, якщо вона доступна, тож ви можете просто використовувати будь-які способи встановлення правильних EXIF-даних. Будь-яка камера повинна встановити це автоматично для вас, просто переконайтесь, що дата / час у них правильні.

Для відео або якщо ви не хочете встановлювати EXIF-дані, просто перейдіть на сторінку https://photos.google.com/ та завантажте звідти своє відео / фотографії. Він зберігає часову позначку модифікації, яку ви маєте на своєму комп’ютері, і оскільки вона синхронізована з вашим пристроєм, ви побачите фотографію в додатку, правильно відсортовану, як тільки ви закінчите з завантаженням.


1

Використовуйте інструмент синхронізації, наприклад, FolderSync , який повинен подбати про часові позначки відповідно. Інструменти синхронізації повинні спеціалізуватися на обробці всіх аспектів дійсно збереження синхронних копій - включаючи часові позначки, звичайно.


Я спробував пару інструментів синхронізації, але жоден не синхронізував часову позначку, тому що, мабуть, є якийсь захист. Дякую за відповідь, хоча.
Ман

Ви спробували FTPSyncX Trial ? Мабуть, не найвишуканіший вигляд (дев не дизайнер). Але я використовую Pro вже близько року, і він синхронізує часові позначки через SFTP / SSH (єдиний я використовую протокол - додаток може працювати більше).
Izzy

Я перевірю це, але, враховуючи, що SSHDroid не працював для мене, я думаю, я також не отримаю часові позначки.
Ман

Я майже сподіваюся, що це буде. Я все ще пам’ятаю, наскільки важкою була ця частина для розробника - ми сиділи годинами в скайпі, обговорювали цю проблему :) Була та потворна проблема часу в Windows, яка інколи неправильно повідомляла про речі… О, отримання OT :) Просто спробуйте, не може нашкодити, правда? І дайте нам знати, як це вийшло ...
Іззі

Нічого. Пробний FTPSyncX як клієнт по телефону, freeSSHd як сервер на ноутбуці, я можу підключати та синхронізувати файли через STP / SSH, але часова марка зображень, переданих на телефон, все ще переноситься на поточну дату.
Ман

1

ЗБЕРІГАННЯ ДАТИ, МОДИФІКОВАНО НА NEXUS ПРИСТРІЙ --- НЕ ПОТРІБНИЙ КОРОТ ---

  • Від Android до ПК: Використовуйте MTP
  • Від ПК до Android: Використовуйте Провідник Droid

ура! :)

він зберігає дату змінену. Я не знаю, як це робить Droid Explorer. але це просто працює.

переконайтеся, що USB-налагодження встановлено перед використанням Droid Explorer.

гм .. хоча є одне обмеження .. Провідник Droid може передавати лише файли, а не папки.

  • за допомогою Droid Explorer скопіюйте файли в телефон Android на певну папку
  • потім за допомогою диспетчера файлів всередині Android перемістіть ці файли в потрібну нам папку, не використовуйте копію, оскільки копія змінить дату, змінену, поки вирізання не буде.

Провідник Droid вимагає ROOT, чи не так?
AntonK

@AntonK Так. Для збереження часової позначки Droid Explorer потребує Root. Якщо Root недоступний, він замінить дату: maxrev.de/…
mgutt

1

Використовуйте PTP замість MTP при підключенні телефону через USB. Це працює для мене, я використовую Samsung Note 4, підключений до машини Ubuntu 14.04. Однак підключення як PTP дозволяє лише копіювати зображення / зображення. Усі інші способи копіювання файлів (Bluetooth, WIFI, файловий менеджер) на зовнішній диск змінять дату.


Я перевірив це з Windows 10 та Note 3, використовуючи CM 12.1 (Android 5.1.1). Я перемістив файли (єдиний спосіб, коли Windows дозволяє зберегти), але це не зберегло часові позначки. :(
mgutt

0

Моє рішення зберегти дату модифікації під час копіювання файлів на пристрої Android з MTP:

Тестували на складі LG G2 (без кореня), Andorid 4.4.2 та HTC one M7, Andorid 4.4.2:

  1. Частка мережі в папці для копіювання на комп'ютер (Win 8)
  2. Використовуйте SyncMe Wireless для копіювання файлів з комп'ютера на пристрій

Наскільки я бачу, дати модифікації повністю збереглися!


0

Рішення для резервного копіювання, використовуючи "Зона пам'яті SanDisk", щоб зберегти дату часових позначок. копіювання / переміщення файлів з пристрою Android на зовнішній SDCard - випробувано на Samsung Note 2, Note 3 та Mini SIII

Просто створіть резервні копії своїх фото-файлів на SDCard та перемістіть карту на інший Android, ПК, Apple чи інший пристрій - якщо не використовується для резервного копіювання ваших фотографій, дотримуйтесь цієї простої інструкції 8 кроків "

  1. Шукайте в Google Play та встановіть "SanDisk Memory Zone".
  2. Запустіть додаток і дочекайтеся завершення файлу індексу.
  3. Виберіть Резервне копіювання / Відновлення та змініть або позначте настройки.
  4. Виберіть місце призначення картки пам'яті та резервну копію (контакти, sms, фотографії, музику тощо).
  5. Перевірте необхідну та наявну ємність та перейдіть на продовження роботи.
  6. Зачекайте, поки резервна копія завершиться.
  7. Тепер у вас є копія файлів на SDCard на ".memoryzone_backup / files / 1"
  8. Тепер ви можете переміщати файли SD-карти, як фотографії, на свій Windows, Linux або інший пристрій Android, зберігаючи оригінальну мітку часу.

копіювання файлів на зовнішні SD-карти не спричиняє проблем із часовою міткою модифікації
AntonK

0

Швидке і просте рішення: просто скористайтеся ПК або Mac для копіювання файлів зі старої SD-карти (або ПК) на нову SD-карту. Використовуйте ПК / Mac із зчитувачем / записуючої карткою SD (є перетворювачі USB-SD-карт), яка розглядає картку як USB-накопичувач FAT32. Закінчивши копіювання, вставте нову карту в телефон і перезавантажте.


0

Я перейшов на Moto X 2014, і в мене була ця проблема.

Я також спробував багато речей, здавалося, рішення "Motorola Migrate" було синхронізовано з двома телефонами WiFi (старий пряник). У галереї ситуація була хорошою (навіть у деталях), але дивно в файловому менеджері дата була змінена, і через кілька годин навіть галерея також показала дату перенесення.

Вирішення проблеми, якщо файлів не так багато, можна копіювати по черзі вручну, змінюючи кожну дату та годину в телефоні.


0

У мене Nexus 4 і в мене була та сама проблема з часовою маркою та фотографіями (справді всі файли).

Ось командні рядки (із вкоріненим телефоном), якими я користувався, завдяки публікації на Ubuntu:

sudo apt-get install android-tools-adb

(на Ubuntu, якщо Android SDK не встановлено)

adb devices
cd /media/my_backup_folder_where_i_put_a_folder_with_all_my_data_named_"savandroid"_in_it

Для того щоб зайти в мою папку "резервна копія", яка містить папку "savandroid"

adb root
adb push savandroid /sdcard

Усі файли та папки, що знаходяться в "saveandroid", надсилаються на SD-карту, яка працювала добре з усіма правильними позначками часу!

Примітка : На Cyanogenmod мені довелося вибрати корінь для "apps and adb" у меню розробників. За замовчуванням він встановлюється лише в додатках.


0

Я додам своє рішення, яке працювало на Ubuntu

Спочатку встановіть simple-mtpfs та встановіть запобіжник

cd ~
mkdir myphone
simple-mtpfs ~/myphone

Тепер у вашому каталозі встановлені папки телефону, ви можете використовувати rsync -tабо cp -pкопіювати зображення, і створені / модифіковані / доступні часи не змінюватимуться.

Працюй для мене :)


У терміналі, монтуючись простою mtpfs, часові позначки видаються збереженими. Але при доступі до файлів у телефоні часові позначки, як видається, усі скидаються.
Teresa e Junior

0

Щоб скопіювати файли з Android на ПК, зберігаючи часові позначки:

adb shell tar c -C /storage/emulated/0/XXX . | tar xv

Щоб відновити їх назад на Android:

tar c . | adb shell tar xv -C  /storage/emulated/0/XXX 

Це працює, створюючи файл tar на внутрішньому пристрої, який негайно витягується на хості та viceversa.

"V" дозволяє побачити ім'я копіюваного файлу.

Звичайно, це передбачає, що у вас встановлено "adb", що в телефоні включена налагодження через USB, і що ви вже підтвердили сертифікат налагодження.

sudo apt install adb

-1

Спробуйте додаток "Передача файлів Bluetooth", він зберігає змінену дату з переміщенням. І я вважаю, що і з копією, але спробуйте спочатку один файл / папку. Він також може вивчити інший пристрій за допомогою bluebooth.


Надання посилань на додатки, які ви рекомендуєте, зробить це кориснішою відповіддю.
eldarerathis

-1

Використовуйте SyncMe Wireless та мережевий доступ. Часові позначки зберігаються, і синхронізація швидка. Мені вдалося створити резервну копію без комп’ютера на SD-картці в Kingston MobileLite Wireless за 20 хвилин, миттєво повторно синхронізувавшись.


Чи можете ви зв’язати цю програму?
Матвій

Я міг знайти лише посилання для SyncMe Wireless , але не "Мережева частка", якщо ви насправді не мали на увазі це єдине додаток. Також надайте короткий підсумок програми та кроки, як це зробити, якщо це можливо.
Андрій Т.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.