Ich verwalte meine Dateien in Termux oft mit Skripten, die den mv
Befehl verwenden, um sie zu verschieben oder umzubenennen. /storage/emulated/0
Ich möchte MediaProvider manuell auslösen, um meinen internen Speicher ( ) oder ein bestimmtes Verzeichnis darin mit der Befehlszeile auf einem Telefon zu scannen , auf dem Nougat oder Oreo ausgeführt wird.
Wenn ich eine GUI-Dateimanager-Anwendung verwende, werden alle Verschiebungen/Umbenennungen sofort in anderen MediaScanner-abhängigen Apps wie Gallery widergespiegelt, aber Änderungen, die in einem Terminal vorgenommen werden, nicht bis zu einem Neustart. Also muss ich MediaScanner manuell aufrufen, um meine Änderungen im Dateisystem zu aktualisieren.
Vor KitKat funktionierte dies gut auf /storage/sdcard0
(einer separaten Partition namens glow
):
am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard
Der obige Befehl funktioniert jetzt /storage/emulated/0
offensichtlich nicht ( ).
Das habe ich auch probiert, scheint aber auch nicht zu funktionieren.
am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard
Ich habe die Befehle gerade noch einmal getestet, sie scheinen auf Wechseldatenträgern wie /storage/sdcard1
, /storage/usba
oder /storage/{volume id}
(es wird erneut gescannt) zu funktionieren, aber nicht auf dem internen Speicher meines Telefons (wohin /sdcard
zeigt, oder /storage/emulated/0
).
Hat jemand ein paar Erkenntnisse? Das Neustarten meines Telefons führt immer zu einem erneuten Scan, aber das ist in einigen Fällen unpraktisch.
Hinweis: Die Befehle werden als Root ausgeführt, also keine Bedenken hinsichtlich der Berechtigungen.
Hinweis : Es ist möglich, dass die folgenden Befehle für Sie nicht funktionieren, wenn Sie nur USB-Debugging / Shell (uID 2000) verwenden. In diesem Fall müssen Sie über Root-Zugriff verfügen, damit sie funktionieren .
Vor KitKat hat das gut funktioniert:
am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard
Der obige Befehl funktioniert jetzt offensichtlich nicht.
Dies funktioniert perfekt auf meinem Standard-Android 7.1.1 (Nexus 6), das nur internen Speicher hat. Aber ab Oreo sind implizite Broadcasts nicht erlaubt , also muss man einen expliziten Broadcast an Media Storage senden . -n
Dies kann mit dem Argument gefolgt vom Komponentennamen oder einfach von -p
gefolgt vom Paketnamen erfolgen . In Android 9.0 (OnePlus 6) hat bei mir Folgendes funktioniert:
am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard/ -p com.android.providers.media
Ich glaube, der obige Befehl würde auch für Android Oreo funktionieren.
Hinweis: Shell (Benutzer 2000) kann diesen Befehl nicht ausführen, daher müssen Sie die Berechtigung auf System (1000) oder Root (0) erhöhen. Kurz gesagt, führen Sie den Befehl als root aus, sonst funktioniert er nicht.
Das habe ich auch probiert, scheint aber auch nicht zu funktionieren.
am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard
Weil diese Absicht eine Datei als Daten erwartet, kein Verzeichnis (ich verstehe, dass alles eine Datei in Linux ist, aber das ist bei einer Absicht nicht der Fall). Geben Sie den vollständigen Pfad einer Datei an und es würde funktionieren. Machen Sie außerdem, wie oben erwähnt, für Oreo und höher die Sendung explizit .
Wenn Sie mehrere Dateien haben und beabsichtigen, nur diese Absicht zu verwenden, müssen Sie alle Dateinamen abrufen und sie rekursiv an die Absicht übergeben (gemäß Aritra Roy auf Stack Overflow). Es kann möglich sein, ein Array zu übergeben, aber ich weiß nicht, wie ich es mit adb machen soll.
Außerdem verhielt sich mein Android bei Dateinamen mit []
.
Security exception: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=28279, uid=2000
In Android 10 (Huawei Mate 20 Pro) wurde beim Ausführungsversuch
ein Fehler angezeigtadb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard/ -p com.android.providers.media
Izzy
iBug
Acejavelin
Izzy
/data
, oder eher die interne SD?) – könnte es einen Versuch wert sein, einen Broadcast- Speicher bereitzustellen (nimm dann die interne SD). Sagte nicht Unmount/Mount, nur Broadcasting.iBug
/sdcard
welche Punkte auf/storage/emulated/0
da ich finde, dass es sich zwischen/storage/emulated/0
and/storage/sdcard1
/ anders verhält/storage/usba
.Izzy
mount
). Benötigt jedoch möglicherweise Root-Kräfte, da es "geschützt" werden könnte.iBug
Izzy