MediaScannerReceiver.java revision 702152725052b7b3903ed647cf53f04724886a1b
1702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project/* //device/content/providers/media/src/com/android/providers/media/MediaScannerReceiver.java
2702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project**
3702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** Copyright 2007, The Android Open Source Project
4702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project**
5702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");
6702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** you may not use this file except in compliance with the License.
7702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** You may obtain a copy of the License at
8702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project**
9702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project**     http://www.apache.org/licenses/LICENSE-2.0
10702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project**
11702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** Unless required by applicable law or agreed to in writing, software
12702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS,
13702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** See the License for the specific language governing permissions and
15702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project** limitations under the License.
16702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project*/
17702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
18702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectpackage com.android.providers.media;
19702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
20702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport android.content.Context;
21702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport android.content.Intent;
22702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport android.content.BroadcastReceiver;
23702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport android.net.Uri;
24702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport android.os.Environment;
25702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport android.os.Bundle;
26702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
27702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectimport java.io.File;
28702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
29702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
30702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Projectpublic class MediaScannerReceiver extends BroadcastReceiver
31702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project{
32702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    private final static String TAG = "MediaScannerReceiver";
33702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
34702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    @Override
35702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    public void onReceive(Context context, Intent intent) {
36702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        String action = intent.getAction();
37702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        Uri uri = intent.getData();
38702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        String externalStoragePath = Environment.getExternalStorageDirectory().getPath();
39702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
40702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
41702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            // scan internal storage
42702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            scan(context, MediaProvider.INTERNAL_VOLUME);
43702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
44702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            // scan external storage if it is mounted
45702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            String state = Environment.getExternalStorageState();
46702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            if (Environment.MEDIA_MOUNTED.equals(state) ||
47702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                    Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
48702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project               scan(context, MediaProvider.EXTERNAL_VOLUME);
49702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            }
50702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        } else {
51702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            if (uri.getScheme().equals("file")) {
52702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                // handle intents related to external storage
53702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                String path = uri.getPath();
54702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                if (action.equals(Intent.ACTION_MEDIA_MOUNTED) &&
55702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                        externalStoragePath.equals(path)) {
56702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                    scan(context, MediaProvider.EXTERNAL_VOLUME);
57702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) &&
58702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                        path != null && path.startsWith(externalStoragePath + "/")) {
59702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                    scanFile(context, path);
60702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                }
61702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project            }
62702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        }
63702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    }
64702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
65702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    private void scan(Context context, String volume) {
66702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        Bundle args = new Bundle();
67702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        args.putString("volume", volume);
68702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        context.startService(
69702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                new Intent(context, MediaScannerService.class).putExtras(args));
70702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    }
71702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
72702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    private void scanFile(Context context, String path) {
73702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        Bundle args = new Bundle();
74702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        args.putString("filepath", path);
75702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project        context.startService(
76702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project                new Intent(context, MediaScannerService.class).putExtras(args));
77702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project    }
78702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project}
79702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
80702152725052b7b3903ed647cf53f04724886a1bThe Android Open Source Project
81