在Android程序开始时初始化MediaScanner

时间:2011-04-02 00:09:46

标签: android

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

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

  1. DEBUG / MediaScanner(166):opendir / system / media / failed,errno:2< - PROGRAM ERROR HERE
  2. DEBUG / MediaScannerService(166):已完成扫描卷内部
  3. DEBUG / MediaScannerService(166):开始扫描卷外部
  4. VERBOSE / MediaProvider(166):/ sdcard卷ID:45454545
  5. VERBOSE / MediaProvider(166):附加卷:外部
  6. DEBUG / MediaScannerService(166):已完成扫描卷外部< - 此处位于程序中间
  7. 该程序在#1处有错误,因为它试图加载在#6之前无法使用的媒体。

    有没有办法强制Android在程序开始时完成MediaScannerService?

    或者,有没有办法检查MediaScannerService何时完成扫描?

    谢谢。

1 个答案:

答案 0 :(得分:4)

您可以在代码中添加 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();
            }
        }
    };