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