【问题标题】:Initialize MediaScanner at Beginning of Android Program在 Android 程序开始时初始化 MediaScanner
【发布时间】:2011-10-04 11:59:09
【问题描述】:

我有一个 Android 程序,它首先加载一些用户的媒体。有时程序会崩溃——无论是在模拟器上还是在实际手机上。我发现这是因为有时媒体仅在活动运行一段时间后才可供程序使用。

发生这种情况时,典型的日志输出顺序如下:

  1. DEBUG/MediaScanner(166): opendir /system/media/ failed, errno: 2
  2. DEBUG/MediaScannerService(166):已完成内部卷扫描
  3. DEBUG/MediaScannerService(166):开始扫描外部卷
  4. VERBOSE/MediaProvider(166):/sdcard 卷 ID:45454545
  5. VERBOSE/MediaProvider(166):附加卷:外部
  6. DEBUG/MediaScannerService(166):已完成外部卷扫描

程序在 #1 处出现错误,因为它试图加载直到 #6 才可用的媒体。

有什么办法可以强制Android在程序开始时就完成MediaScannerService?

或者,有什么方法可以检查 MediaScannerService 何时完成扫描?

谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以在代码中添加 BroadcastReceiver 并处理 ACTION_MEDIA_SCANNER_FINISHED 广播。它实际上是在完成扫描后由 MediaScannerService 发送的。希望下面的示例代码有所帮助。

    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
    filter.addDataScheme("file");
    registerReceiver(mReceiver, filter);   
    
    BroadcastReceiver mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
                    Toast.makeText(MediaScannerActivity.this, "Scan complete.", Toast.LENGTH_SHORT).show();
                }
            }
        };
    

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2020-12-25
      相关资源
      最近更新 更多