Điều này bắt đầu với tư cách là câu hỏi chung của người dùng trên các diễn đàn Android. Tuy nhiên nó trở thành, bởi sự cần thiết, một câu hỏi lập trình. Đây là vấn đề của tôi.Tôi làm cách nào để làm mới MediaStore trên Android?
Android có dịch vụ - MediaScanner - chạy trong nền bất kỳ lúc nào (tôi tin) thẻ SD chưa được gắn và gắn lại. Dịch vụ này thu thập dữ liệu trên tất cả các tệp phương tiện trên thẻ và cung cấp một DB SQLite có thể được truy vấn bởi các ứng dụng âm nhạc. Hầu hết các ứng dụng nhạc đều sử dụng dịch vụ này vì nó tiết kiệm pin khi kết hợp với việc quét thẻ SD.
Kể từ khi tôi bắt đầu sử dụng Android, tôi đã liên tục gặp sự cố khi danh sách M3U được đồng bộ hóa với thiết bị vẫn còn trong DB SQLite này ngay cả sau khi bị xóa khỏi Thẻ SD. Đã đến lúc tôi có bộ sưu tập khoảng 40 danh sách phát hiển thị trong mọi ứng dụng nhạc tôi sử dụng, mặc dù chỉ có khoảng 10 m3u tệp trên thẻ. Các danh sách phát còn lại không phát và trống. Tôi có thể xóa chúng bằng tay bằng cách xóa chúng khỏi ứng dụng nhạc, nhưng tôi bị bệnh vì làm điều này. Phải có cách tốt hơn để xóa các danh sách phát ma này.
Có hai ứng dụng trên Android Market - SDRescan và Máy quét nhạc, được cho là thực hiện chính xác việc này nhưng không phải ứng dụng nào hoạt động.
Tôi đặt về cách viết ứng dụng của riêng mình để làm mới hoặc xóa cơ sở dữ liệu MediaStore và bắt đầu từ đầu, nhưng tôi không nhận được rất xa. Tôi đã có một ứng dụng Android chạy mã sau:
Tôi đã tìm thấy một vài ví dụ về mã này trực tuyến như một cách để quét thẻ SD nhưng tôi không có bất kỳ may mắn nào với nó . Có lời khuyên nào không?
ĐẦY ĐỦ Mã sản phẩm:
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 = new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory()));
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);
intentFilter.addDataScheme("file");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
}
Xin chào, Bạn có biết gửi sendcast (new Intent (Intent.ACTION_MEDIA_MOUNTED, Uri.parse ("file: //" + Environment.getExternalStorageDirectory()))); sẽ làm việc cho sdcard đó là thẻ khe cắm thêm? nói cách khác getExternalStorageDirectory() trả về một đường dẫn đến sdcard mà là nội bộ nhưng có thể được nhà sản xuất cung cấp thẻ bên ngoài? làm thế nào có thể được gọi là máy quét phương tiện truyền thông cho thẻ như vậy? – Ahmed
dường như không có cách nào để thực hiện việc này vào lúc này. xem chủ đề này: http://stackoverflow.com/questions/5453708/android-how-to-use-environment-getexternalstoragedirectory – roryok