使MediaServer立即扫描通过adb创建的文件 -- adb 领域 和 automation 领域 和 media-scanner 领域 android 相关 的问题

Making mediaserver immediately scan a file created through ADB


简体版||繁體版
6
vote

问题

中文

我的库存中的媒体服务器和rooted android 6.0.1(在Nexus 6中运行)没有检测到使用adb创建或移动到/ sdcard的新文件。它不会检测到我做一个软/完全重启,我发现无法执行。

我能够使用命令行手动运行MediaServer以再次开始文件扫描 ,我希望这可以自动完成,并立即完成新文件在/ sdcard 下创建。 <罢工>此刻,只要拔出USB电缆,我都有Tasker运行MediaServer。 *

这里的明显选择似乎是一个自动化应用程序,其中我尝试了tasker和 Automate ,并且在通过ADB创建时,似乎令人惊讶地无法检测到新文件,特别是在/ SDCard / Music下。但是,如果应用程序在 / sdcard 下的任何目录中创建的文件,那么这两个应用程序立即检测到更改。我还尝试将文件推送到 /存储/仿真/ 0 / 而不是 / SDCARD / ,并在这两个应用程序的触发中进行了相应的更改。这一步没有让我受益。

是要注意的,我在股票Android 5.1.1和CM13快照构建中观察到这个问题。

所以,我如何实现目标?

更新

我知道在我的PC中运行的OS中创建别名的可能性,它将执行一个脚本,提供一种方法来推送文件以及运行MediaServer。 <罢工>但是,我想尽可能避免的东西。

* 我使用它,但后来切换到使用别名从PC执行的脚本。但是, 我不想依赖于两个方法中的任何一种 。我的手指对键入 adb推送而不是 adb_push 或其他但单个单词。

更新2

  • 我不打算将自己限制在特定目录中,例如下载,既不将文件推入后者实际上有效。
  • 我想强调我不要求如何运行mediaserver 。我已经知道了。我正在寻找的就是:每当我做<代码> adb push FILE /sdcard/FILE 时,mediaserver应该自动并立即启动并扫描文件。无论任何可察觉的性能问题如何,我都希望它在每一次踢。

更新3

好的,我可能使用不正确的术语。也许 MediaServer Media Scanner 是Android中的两个不同事物的术语。在混乱的情况下,请坚持下去 "媒体扫描仪" 对于当前版本和赏金说明。

更新4

由Androidyue for 这个有用的资源,在预格式化的文本中的任何一个命令都是我可以在我的设备中使用的,以使媒体扫描仪扫描文件。

 #pept_path是指在Android中推送文件的位置。例如。 /sdcard/music/lolcat.mp3  AM广播-A android.intent.action.boot_completed -n com.android.providers.media/.mediaScannerReceiver AM广播-A android.intent.action.media_scanner_scan_file -d文件:// file_path#保证工作。查看https://goo.gl/lh0clt验证。 AM广播-A android.intent.action.media_mounted -d文件:// file_path 

更新5

per per 建议来自Manubhargav,我尝试了Sarkie的MTPFix 这里。它不起作用,无论是股票的Android 6.0.1和CM13。当我为该应用程序启用服务时,我看到了以下条目。

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

我后来将声音文件推入 / storage / ed / 0 / ,我的音乐播放器中的任何内容都没有显示。 logcat也没有显示任何有用的东西。

顺便说一下,这个app 使用fileobserver ,所以如果它无法检测到使用adb创建的文件,我并不感到惊讶,因为它与我尝试的自动化应用程序相同。

注意:请在您自己测试时才会发布答案。谢谢!

english

The mediaserver in my stock and rooted Android 6.0.1 (running in Nexus 6) doesn't detect new files created or moved to into /sdcard using adb. It doesn't detect until I do a soft/full reboot which I find unacceptable to perform.

I'm able to manually run mediaserver using command-line to begin file scanning again# and I want this to be done automatically and immediately whenever a new file is created under /sdcard. At the moment, I have Tasker run the mediaserver whenever USB cable is unplugged.*

The obvious choice here seems to be an automation app of which I tried Tasker and Automate, and both amazingly failed to detect new files, particularly under /sdcard/Music, when created through adb. However, if an app created files in any directory under /sdcard those two apps immediately detected the changes. I also tried pushing files to /storage/emulated/0/ instead of /sdcard/ and made corresponding changes in those two apps' triggers.That step didn't benefit me.

It is to be noted that I observed this problem in stock Android 5.1.1 and a CM13 snapshot build as well.

So, how do I achieve the goal?

Update

I'm aware of the possibility of creating an alias in the OS running in my PC which would execute a script providing a way to push the file as well as run the mediaserver. However, it is something I would like to avoid as much as possible.

* I was using it but later switched to a script executed from PC using an alias. However, I do not want to depend upon any of the two methods. My fingers are comfortable with typing adb push instead of adb_push or some other but single word.

Update 2

  • I do not intend to restrict myself to a particular directory, such as Download and neither pushing files into the latter actually works.
  • I would like to stress that I'm not asking for how to run mediaserver. That I already know. All I'm looking for is: Whenever I do adb push FILE /sdcard/FILE the mediaserver should automatically and immediately kick in and scans the file. Regardless of any perceivable performance issue, I want it to kick in every single time.

Update 3

Okay, I may be using an incorrect term. Perhaps mediaserver and media scanner are terms for two different things in Android. In the case of confusion, please stick with "media scanner" for both the current revision and the bounty note.

Update 4

# Courtesy of androidyue for this helpful resource, any of the following command in preformatted text is what I can use in my device to make media scanner scan the file.

 # FILE_PATH refers to the location of pushed file in Android. E.g. /sdcard/Music/lolcat.mp3  am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.providers.media/.MediaScannerReceiver am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file://FILE_PATH   # guaranteed to work. See https://goo.gl/lH0CLT for proof. am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://FILE_PATH  

Update 5

Per the suggestion from Manubhargav, I tried Sarkie's MTPFix available here. It didn't work, both in stock Android 6.0.1 and CM13. I saw the following entry when I enabled the service for that app.

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

I later pushed a sound file into /storage/emulated/0/ and nothing showed up in my music player. Logcat also didn't display anything useful either.

By the way, this app uses FileObserver, so I'm not surprised if it couldn't detect files created using adb, since it is the same issue with the automation apps I tried.


Note: Please post an answer only when you've tested it yourself. Thank you!

        
 
 

回答列表

2
 
vote
vote
最佳答案
 

好的,似乎答案是微不足道的。我的手指不必失去键入 adb push ,但我可以使媒体扫描仪扫描我的推送文件自动并立即。这是我的脚本调整了我的需求:

note :root访问是在Android中所需的 not

 #!/ bin / bash  函数push_file(){     target ="$ {@:-1}" ;     file_path ="$ {@:-2:1}" ;     [[$ prog_bar"==" -p"]]&amp;&amp; adb"$ @" || $ call_adb推送-p"$ file_path" "$ target" ; }  功能广播(){     file_name ="$(basename" $ file_path")" ;     [[echo"$ {target:-1}" `!="/" ]]&amp;&amp;取消设置file_name;     [["echo" $ {target:0:1}"`!=" /"]&amp;&amp;目标="/ $ {target}" ;     $ call_adb shell'am boadd-a android.intent.action.media_scanner_scan_file -d'"" 文件:// $ target $ file_name "" ''&gt; / dev / null; }  如果[["$ 1" =="-s" ]];然后     if [[$ 3"==" 推"]];然后         prog_bar ="$ 4" ;         call_adb ="adb -s $ 2" ;         push_file"$ @" &amp;&amp;播送;     别的         adb"$ @" ;     FI. elif [["$ 1" =="推" ]];然后         prog_bar ="$ 2" ;         call_adb ="adb" ;         push_file"$ @" &amp;&amp;播送; 别的     adb"$ @" ; FI. 

然后我在 .bashrc 中设置名为 adb 的别名:

  alias adb='bash FILE'  # FILE refers the file path of the said script   

这是可能的感谢:处理位置参数 Bash黑客Wiki。

note :脚本或多或少需要PC中的* NIX基于Bash版本的3.x版本,并支持 .bashrc 。如果您打算使用脚本,则鼓励您编辑它以适应您的工作方式。

 

Okay, it seems the answer is trivial. My fingers don't have to lose the comfort of typing adb push, yet I would be able to cause media scanner scan my pushed file, automatically and immediately. Here's my script tweaked to my needs:

(Note: root access is not required in Android)

 #!/bin/bash  function 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" ]]; then     if [[ "$3" == "push" ]]; then         prog_bar="$4";         call_adb="adb -s $2";         push_file "$@" && broadcast;     else         adb "$@";     fi elif [[ "$1" == "push" ]]; then         prog_bar="$2";         call_adb="adb";         push_file "$@" && broadcast; else     adb "$@"; fi 

I then setup an alias named adb in .bashrc like this:

alias adb='bash FILE'  # FILE refers the file path of the said script 

This was possible thanks to the very helpful article: Handling positional parameters at Bash Hackers Wiki.

Note: the script more or less requires a *nix based OS in PC with version 4.x of Bash installed and support for .bashrc. If you intend to use the script, you're encouraged to edit it to suit your working style.

 
 
0
 
vote

我不确定媒体扫描仪如何正常工作, 我认为媒体扫描仪不断更新内部存储中的下载文件夹...

如果某些文件在另一个文件夹中没有显示,则将其复制到下载文件夹,它触发媒体扫描仪...

尝试在内部存储器内使用下载文件夹作为绝对路径

 

I'm not sure how the media scanner works exactly, I think that the media scanner constantly updates the Download folder inside internal storage...

if something doesn't show up inside another folder, i copy it to the download folder and it triggers media scanner...

Try using Download folder inside Internal Storage as the absolute path

 
 
         
         

相关问题

0  将电影正确添加到Nexus 7  ( Correctly adding movies to a nexus 7 ) 
我最近得到了一个nexus 7(今年的模型),我似乎无法正确地添加电影。我拖动了一堆目录,每个目录都包含一个视频文件和子文件到/ SDCard中的电影目录,但默认电影播放器​​(Google播放电影)没有正确识别。相反,他们在画廊中出现。格式为MP4或MKV(X264,带有AC3或AAC)。 文件应该去哪里,所以它们...

0  仍然是一个谜。 Thumbdata3文件空间和性能猪  ( Still a mystery thumbdata3 file space performance hog ) 
我只是不知道如何解决这个问题。 我几乎尝试了一切并放弃了。 如果存在 abcdefghijklmn.thumbdata3 文件,我已经阅读了其他线程。占用了很多空间的文件。我的文件占用了近20 GB,我买不起那个空间浪费。 我已经做了以下事情来尝试和规避,但没有任何作品 以相同的名称创建一个空文件。 该空文件最终...

2  如何重新安装MediaScannerService?  ( How do i reinstall mediascannerservice ) 
我最近扎根了我的三星展览II。并彻底删除了一些漂浮软件,不小心胖的胖子,并删除了MediaScannerService而没有意识到我删除了什么。有没有人如何重新安装这项服务?我尝试下载应用程序,但它们只是访问服务并重新启动它。由于该服务已被删除,因此应用程序基本上无所作为。 ...

8  为什么Android媒体存储无法检测到我的新铃声文件?  ( Why cant android media storage detect my new ringtone file ) 
我在Nexus 4和Nexus 5(所有电话中)都有这个问题。 我有一个文件,它是我所有手机上使用的相同的铃声文件,它是一个我喜欢的歌曲的编辑mp3。 我将此文件放在我的设备的"铃声" 文件夹中。 当我转到铃声时,我的新文件在Android设置中的选择中不可用。 重新启动设备不会导致要检测到的新文件。 我最终完成每一...

2  电源管理/电池用法下的“MediaServer”(Xperia ZL)  ( Mediaserver under power management battery usage xperia zl ) 
我有一个索尼xperia zl运行Android 4.2.2。有一个名为"MediaServer" 的后台过程,它使用了我的大部分电池,而手机则在待机状态。如果我向100%向100%收费并单独留下它,"MediaServer" 过程本身将占所有电池使用量的30%,距离MediaServer管理常规介于"保持清醒" !...

1  我如何停止媒体扫描?  ( How can i stop media scanning ) 
我有一个lg l7 mobile。从2天前,我对扫描媒体文件有一个严重的问题。我打开我的手机和扫描媒体文件开始扫描。之后,扫描媒体文件完成它一次又一次地开始,直到知道它是扫描。我不知道它是硬件还是软件问题?我要做什么?请帮我。 ...

21  音乐播放器不断显示已删除的歌曲。如何删除它们或刷新库?  ( The music player keeps displaying deleted songs how do i remove them or refresh ) 
我正在使用带有根的姜饼的机器x,否则是股票的。我有root访问权限,但尚未使用它做任何事情。 我已经多次检查/音乐文件夹,并且我删除的500多首歌曲在物理系统中不再在文件系统中。我尝试多次重新启动手机。我尝试在Settings&gt中删除应用程序的缓存和数据;应用程序,以及运行SDRESCAN重新安装并重新扫描卡。我...

1  Nomedia文件未隐藏新创建的图像。解决方案?  ( Nomedia file not hiding newly created images solution ) 
注5运行5.1.1 这是我的问题... 一个.Nomedia文件放在自动下载相册艺术的文件夹中,如果在之前,如果在中创建或修改之前,则只能将图像从图库中隐藏。任何新的下载的专辑艺术在画廊中可见。清除缓存,数据和强制停止两个库和媒体存储应用,以及关闭并重新启动设备无法解决问题。在中下载,在 .Nomedia文件的创...

2  一旦应用程序创建,如何删除文件?  ( How to delete a file once it is created by an app ) 
这个问题适用于应用程序创建的任何文件,但这是我问题的描述。 我有一个应用程序安装在我的手机中,每次在应用程序中发生特定操作时,在我的存储根中创建.Nomedia文件。这会导致我手机上的所有媒体文件不出现在Gallery应用程序中,因为媒体扫描仪忽略了所有内容。 我联系了这个应用程序,但他们仍然没有设法解决这个问题。我...

2  是否可以将任意文件夹添加到媒体扫描仪?  ( Is it possible to add arbitrary folders to the media scanner ) 
我有三星迷人的滑行,它有4个存储器,不是主存储,而不是SD卡内存。它显示为 settings->storage 下的单独部分,它已安装在 /sdcard/usbStorage 上 真实的物理SD卡安装在 /sdcard/external_sd 。 所以它是4兆的可用空间,但我不能为任何东西使用它,因为媒体扫描仪不...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有