相关疑难解决方法(0)

如何在Android上刷新MediaStore?

这开始是Android论坛上的一般用户问题.然而,它必然是一个编程问题.这是我的问题.

Android有一项服务 - MediaScanner - 它可以随时在后台运行(我相信)SD卡已卸载并重新安装.此服务收集卡上所有媒体文件的数据,并提供可由音乐应用程序查询的SQLite DB.大多数音乐应用程序都使用此服务,因为它可以节省与扫描SD卡相关的电量消耗.

自从我开始使用android以来,我一直遇到一个问题,即即使从SD卡中删除后,与该设备同步的M3U播放列表仍保留在此SQLite DB中.虽然卡上只有大约10个m3u的文件,但我现在已经收集了大约40个播放列表,这些播放列表出现在我使用的任何音乐应用程序中.剩余的播放列表不播放,并且是空的.我可以通过从音乐应用程序中删除它们来手动删除它们,但我厌倦了这样做.必须有更好的方法来删除这些鬼播放列表.

Android Market上有两个应用程序 - SDRescan和Music Sc​​anner,据说可以做到这一点,但它们都不起作用.

我开始编写自己的应用程序来刷新或删除MediaStore数据库并从头开始,但我没有走得太远.我有一个运行以下代码的Android应用程序:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
        Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
Run Code Online (Sandbox Code Playgroud)

我在网上找到了一些这样的代码扫描SD卡的方法,但我没有任何运气.有小费吗?

完整代码:

package com.roryok.MediaRescan;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;

public class MediaRescan extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
        setContentView(R.layout.main);
    }

    //Rescan the sdcard after copy the file
    private void rescanSdcard() throws Exception{     
      Intent scanIntent = …
Run Code Online (Sandbox Code Playgroud)

android mediastore

50
推荐指数
3
解决办法
5万
查看次数

在特定路径(文件夹)上触发mediascanner,如何?

我上了这堂课:

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.util.Log;

public class MediaScannerWrapper implements  
MediaScannerConnection.MediaScannerConnectionClient {
    private MediaScannerConnection mConnection;
    private String mPath;
    private String mMimeType;


    // filePath - where to scan; 
    // mime type of media to scan i.e. "image/jpeg". 
    // use "*/*" for any media
    public MediaScannerWrapper(Context ctx, String filePath, String mime){
        mPath = "/sdcard/DCIM/Camera";
        mMimeType = "jpg";
        mConnection = new MediaScannerConnection(ctx, this);
    }

    // do the scanning
    public void scan() {
        mConnection.connect();
    }

    // start the scan when scanner …
Run Code Online (Sandbox Code Playgroud)

android android-mediascanner

14
推荐指数
4
解决办法
3万
查看次数

在Eclipse中找不到Nexus 7的存储/模拟/ 0 /文件夹

Nexus 7,Ubuntu 12.04,Eclipse Juno

Nexus 7已设置为开发者模式.在Eclipse中,我可以在Android的"文件资源管理器"中看到列表.

我可以看到存储/模拟/遗留

但我看不到存储/模拟/ 0 /文件夹

eclipse ubuntu adb nexus-7

10
推荐指数
1
解决办法
3万
查看次数

在Android 5 Lollipop上使用USB-MTP访问目录时,MediaScannerConnection#scanFile会将目录转换为文件

重命名应用程序触发的文件之类的更改仅在重新启动Android设备后显示在USB-MTP界面上,或者在MediaScanner上注册新文件之后(请参阅特定路径(文件夹)上的触发媒体扫描程序),如何操作?):

file.renameTo(newFile);    
MediaScannerConnection.scanFile(context,
        new String[] { newFile.getAbsolutePath() }, null, null);
Run Code Online (Sandbox Code Playgroud)

USB-MTP用于通过USB访问Android设备的存储.例如,使用Windows资源管理器.

但是,使用Android 5.0.2(Build 10.6.A.0.454)下的Sony XPERIA Tablet Z(SGP321)文件夹newFile将成为一个4KB的文件.我不再能够使用Windows资源管理器访问文件夹结构,也无法将文件复制到我的计算机上.即使重启平板电脑!Android 4.4.4的相同设备不显示该行为.似乎只有USB-MTP视图被破坏.Android应用程序访问的文件结构看起来还不错.

问题:这种行为是错误还是我错误地实现了?什么是正确的实施?

到目前为止我为解决这个问题尝试了什么:

  1. 我目前的解决方法是避免scanFile使用目录.
  2. 我可以通过没有使用Android应用程序重命名文件将文件转换回目录MediaScannerConnection#scanFile.重启后,我可以再次使用Windows资源管理器访问该目录.
  3. 使用实际上是目录的Windows资源管理器重命名文件不会还原它们.即使重启后.
  4. /sf/answers/1534265981/ 中建议的这一行不刷新USB-MTP视图,但也不会将目录转换为文件:

    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.fromFile(newFile.getParentFile()));
    
    Run Code Online (Sandbox Code Playgroud)
  5. 也许相关:

android android-mediascanner sony-xperia android-5.0-lollipop

7
推荐指数
1
解决办法
2704
查看次数

在Nexus 7上保存外部存储上的文件并从PC检索

对于我的项目,我希望能够将传感器数据保存到文件中,并能够从PC访问它以进行进一步分析.这是我到目前为止的代码,它成功地运行:

File root = Environment.getExternalStorageDirectory();
File csvfile = new File(root, "Sensor_Data.csv");
FileWriter writer = new FileWriter(csvfile, true);
writer.append("Time");
writer.append(',');
writer.append("Position");
writer.append('\n');
Number data[] = new Number[4000];
for (int i = 0; i<4000; i+=2){
    posHistory.toArray(data);
        writer.append(String.valueOf(data[i]));
    writer.append(',');
        writer.append(String.valueOf(data[i+1]));
    writer.append('\n');
}
writer.flush();
writer.close();
Run Code Online (Sandbox Code Playgroud)

问题是Nexus 7实际上没有外部存储(我相信它使用某种模拟器,以便与大多数在其代码中使用外部存储的应用程序兼容.)

运行此代码后,在设备上使用Astro文件管理器,我在四个位置看到"Sensor_Data.csv"文件:/ sdcard,/ storage/sdcard0,/ storage/emulated/0和/ storage/emulated/legacy.我可以使用texteditor或documentviewer从设备中打开每一个,所有数据都在那里.

问题是当我将Nexus 7连接到PC时,我只看到"内部存储",当打开时实际上只显示虚拟SD卡内容,而不是实际的内部存储,但.csv文件不存在.还有一个额外的目录"storage/emulated/legacy",但也没有任何内容,也没有"sdcard0"或"0"文件夹.当我记录"Environment.getExternalStorageDirectory().getAbsolutePath()"以确切地看到我得到的路径/存储/模拟/ 0

我已经尝试将文件保存在内部存储中的其他位置但没有成功,但我宁愿将其保留在"外部存储"中,以便该应用程序与使用外部存储的大多数设备兼容.

更新 所以在使用adb pull filename之后是结果:

adb pull /storage/emulated/0/Sensor_Data.csv
remote object '/storage/emulated/0/Sensor_Data.csv' does not exist

adb pull /storage/emulated/legacy/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>

adb pull /storage/sdcard0/Sensor_Data.csv
243 Kb/s <1495 …
Run Code Online (Sandbox Code Playgroud)

file-io android save android-sdcard nexus-7

5
推荐指数
1
解决办法
1万
查看次数

在android中找不到下载管理器下载的文件

我正在尝试将文件下载到目录,该目录可能会根据用户选择的目录而有所不同。我将当前目录存储在文件对象中,现在尝试下载该文件。文件已下载,但未下载指定目录。那么,我该怎么做才能获取所选目录中的文件。

// Getting path to store the file   
String path = root.getAbsolutePath();   
path += curr.getName();   
request.setDestinationInExternalPublicDir(path, new File(url).getName());    
// get download service and enqueue file   
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);     
manager.enqueue(request);   
Run Code Online (Sandbox Code Playgroud)

传递给 File 构造函数的名为 url 的字符串包含一个 URL。只需使用它来检索文件的名称即可。

更新:我刚刚找到该文件。是在手机里,不是在sd卡里。它位于此文件夹中,storage\emulated\00。不知道为什么?另外,我得到的绝对路径是 storage\emulated\0。

android android-download-manager

5
推荐指数
1
解决办法
1万
查看次数

Android:将文件保存到下载后可以查看

我有一个应用程序需要在连接到流时收集大量数据。我需要将这些数据保存到一个文件中,稍后我可以将其从设备中取出并使用标准计算机进行分析。

我的代码目前如下所示:

private void saveData(byte[] data){
    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    File file = new File(path, "_Ascent_Test.txt");        
    try {                      
        FileOutputStream stream = new FileOutputStream(file, true);             
        stream.write(data);            
        stream.close();
        Log.i("saveData", "Data Saved");        
    } catch (IOException e) {
        Log.e("SAVE DATA", "Could not write file " + e.getMessage());
    }       
}
Run Code Online (Sandbox Code Playgroud)

它正确地命中“数据已保存”日志,没有任何错误,但当我从计算机浏览该文件时,我无法在设备内部存储中的任何位置找到该文件。

我缺少什么?

谢谢。

编辑:我需要在 Nexus 7 上运行它

android file saving-data

3
推荐指数
1
解决办法
1万
查看次数