Pytanie:
Uczynienie serwera mediów natychmiast skanuje plik utworzony przez ADB
Firelord
2016-03-31 16:02:07 UTC
view on stackexchange narkive permalink

Mediaserver w moim magazynie i zrootowanym systemie Android 6.0.1 (działającym na Nexusie 6) nie wykrywa nowych plików utworzonych lub przeniesionych do / sdcard za pomocą adb. Nie wykrywa, dopóki nie wykonam miękkiego / pełnego ponownego uruchomienia, którego wykonanie jest niedopuszczalne.

Mogę ręcznie uruchomić serwer mediów za pomocą wiersza poleceń, aby ponownie rozpocząć skanowanie plików # i chcę, aby było to wykonywane automatycznie i natychmiast po utworzeniu nowego pliku w katalogu / sdcard . W tej chwili Tasker uruchamia serwer mediów za każdym razem, gdy kabel USB jest odłączony. *

Wydaje się, że oczywistym wyborem jest tutaj być aplikacją do automatyzacji, z której wypróbowałem Tasker i Automate, i oba zdumiewająco nie zdołały wykryć nowych plików, szczególnie w / sdcard / Music, gdy zostały utworzone za pomocą adb. Jeśli jednak aplikacja utworzyła pliki w dowolnym katalogu w lokalizacji / sdcard , te dwie aplikacje natychmiast wykryły zmiany. Próbowałem też przesłać pliki do / storage / emulated / 0 / zamiast / sdcard / i wprowadziłem odpowiednie zmiany w wyzwalaczach tych dwóch aplikacji. Ten krok nie przyniósł mi korzyści .

Należy zauważyć, że zauważyłem ten problem w standardowym systemie Android 5.1.1, a także w wersji migawki CM13.

Jak więc osiągnąć cel?

Aktualizacja

Zdaję sobie sprawę z możliwości utworzenia aliasu w systemie operacyjnym działającym na moim komputerze, który uruchamiałby skrypt umożliwiający przesłanie pliku, a także uruchomienie serwera mediów. Jest to jednak coś, czego chciałbym uniknąć w jak największym stopniu.

* Używałem go, ale później przełączono na skrypt wykonywany z komputera PC za pomocą aliasu. Jednak nie chcę polegać na żadnej z dwóch metod . Nie przeszkadza mi pisanie adb push zamiast adb_push lub innego oprócz jednego słowa.

Aktualizacja 2

  • Nie zamierzam ograniczać się do konkretnego katalogu, takiego jak Download, i ani wrzucanie plików do tego drugiego nie działa.
  • Chciałbym podkreślić, że nie proszę o jak uruchomić serwer mediów . To już wiem. Wszystko, czego szukam, to: Za każdym razem, gdy wykonuję adb push FILE / sdcard / FILE , serwer mediów powinien automatycznie i natychmiast uruchomić i skanować plik. Niezależnie od jakichkolwiek zauważalnych problemów z wydajnością, chcę, aby pojawiały się za każdym razem.

Aktualizacja 3

OK, mogę używać nieprawidłowego terminu . Być może serwer mediów i skaner multimediów to terminy określające dwie różne rzeczy w Androidzie. W razie niejasności trzymaj się „skanera multimediów” zarówno dla aktualnej wersji, jak i dla nagrody.

Aktualizacja 4

# Dzięki uprzejmości androidyue dla tego pomocnego zasobu, każde z następujących poleceń we wstępnie sformatowanym tekście jest tym, czego mogę użyć w moim urządzeniu, aby skaner multimediów skanował plik.

 # FILE_PATH odnosi się do lokalizacji przekazanego pliku w systemie Android. Na przykład. /sdcard/Music/lolcat.mp3am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.providers.media/.MediaScannerReceiveram broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file: // FILE_PATH # gwarantowane praca. Zobacz https://goo.gl/lH0CLT, aby uzyskać informacje na temat transmisji proof.am -a android.intent.action.MEDIA_MOUNTED -d file: // FILE_PATH 

Update 5

Zgodnie z sugestia od Manubhargav, wypróbowałem MTPFix firmy Sarkie dostępne tutaj. To nie zadziałało, zarówno w magazynie Android 6.0.1, jak i CM13. Widziałem następujący wpis po włączeniu usługi dla tej aplikacji.

  04-07 09: 38: 14.771 3383 3383 I MTPService: Watching / storage / emulated / 0  

Później umieściłem plik dźwiękowy w / storage / emulated / 0 / i nic nie pokazało się w moim odtwarzaczu muzyki. Logcat również nie wyświetlał niczego przydatnego.

Nawiasem mówiąc, ta aplikacja używa FileObserver, więc nie jestem zaskoczony, jeśli nie mógł wykryć plików utworzonych za pomocą adb, ponieważ jest to ten sam problem z aplikacjami do automatyzacji, które wypróbowałem.


Uwaga: opublikuj odpowiedź tylko po przetestowaniu jej samodzielnie. Dziękuję!

Znalazłem to, wykracza to poza mój zakres wiedzy (odpowiedzi wskazują na jakieś narzędzie MediaScannerConnection w narzędziach programistycznych), ale może to pomóc ... http://stackoverflow.com/questions/15147536/how-to-trigger-mediascan- na-nexus-7
*** Uwaga dla czytelników: nie sugeruj mi kompilowania adb. Tego nie zrobię, nawet jeśli podasz szczegóły. ***
[Poprawka Sarkie's MTP] (https://code.google.com/p/android/issues/detail?id=38282#c42) (APK do zainstalowania na urządzeniu) pomaga serwerowi multimediów skanować pliki skopiowane za pomocą protokołu MTP. * Skanuje rekurencyjnie katalog zewnętrznej pamięci masowej, a następnie dodaje do Media Scanner po utworzeniu pliku. * Może również pomóc w ADB, warto spróbować.
Dwa odpowiedzi:
Firelord
2016-04-04 18:00:37 UTC
view on stackexchange narkive permalink

OK, wydaje się, że odpowiedź jest banalna. Moje palce nie muszą tracić komfortu pisania adb push , ale byłbym w stanie spowodować, że skaner multimediów skanuje mój przesłany plik, automatycznie i natychmiast . Oto mój skrypt dostosowany do moich potrzeb:

( Uwaga : dostęp roota jest nie wymagany w Androidzie)

 #! / bin / bashfunction push_file () {target = "$ {@: -1}"; file_path = "$ {@: -2: 1}"; [["$ prog_bar" == "-p"]] && adb "$ @" || $ call_adb push -p "$ file_path" "$ target";} function broadcast () {file_name = "$ (basename" $ ​​file_path ")"; [[`echo" $ {target: -1} "`! = "/"]] && unset file_name; [[`echo" $ {target: 0: 1} "`! = "/"]] && target = "/ $ {target}"; $ call_adb shell 'am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d' "\" file: // $ target $ file_name \ "" ''> / dev / null;} if [["$ 1" == " -s "]]; wtedy jeśli [["$ 3" == "push"]]; następnie prog_bar = "4 $"; call_adb = "adb -s $ 2"; push_file "$ @" && broadcast; else adb "$ @"; fielif [["$ 1" == "push"]]; następnie prog_bar = "$ 2"; call_adb = "adb"; push_file "$ @" && broadcast; else adb "$ @"; fi 

Następnie konfiguruję alias o nazwie adb w .bashrc w następujący sposób:

  alias adb = 'bash FILE' # FILE odwołuje się do ścieżki pliku wspomnianego skryptu  

Było to możliwe dzięki bardzo pomocnemu artykułowi: Obsługa parametrów pozycyjnych na Wiki Bash Hackers.

Uwaga : skrypt mniej więcej wymaga systemu operacyjnego opartego na * nix na PC z zainstalowaną wersją 4.x Bash i wsparcie dla .bashrc . Jeśli zamierzasz używać skryptu, zachęcamy do jego edycji, aby dopasować ją do swojego stylu pracy.

Gadget Guru
2016-04-02 11:05:59 UTC
view on stackexchange narkive permalink

Nie jestem pewien, jak dokładnie działa skaner multimediów, myślę, że skaner multimediów stale aktualizuje folder pobierania w pamięci wewnętrznej ...

jeśli coś nie pojawia się w innym folderze, kopiuję go do folderu pobierania i uruchamia skaner multimediów ...

Spróbuj użyć folderu pobierania w pamięci wewnętrznej jako ścieżki bezwzględnej

Nie. Nie działa. BTW, czy sam wypróbowałeś to podejście za pomocą ADB?
adb shell am broadcast android.intent.action.MEDIA_MOUNTED ......... Z http://stackoverflow.com/a/19435985/6116090
Myślę, że źle zrozumiałeś moje pytanie. * Nie mam praktycznie problemu z ręcznym uruchomieniem serwera mediów. * Moje pytanie dotyczy robienia rzeczy automatycznie, bez mojej interwencji. Oznacza to, że jak tylko zrobię `adb push FILE / sdcard / DIR /` mediaserver powinien uruchomić się i przeskanować plik.
Czy próbowałeś utworzyć plik wsadowy, aby zautomatyzować skrypt .. Windows to commandlist.bat, a Linux to commandlist.sh
Tak. Obecnie używam prostego skryptu i nie chcę na nim polegać. Odniosłem się nawet do tego w moim pytaniu. Sprawdź zawartość poniżej * Aktualizuj * w moim pytaniu.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...