編輯:關於Android編程
android在啟動的時候會啟動MediaScannerService掃描系統上的多媒體文件,然後將這些多媒體文件的信息加入到多媒體數據庫中,應用程序要取得這些多媒體信息就是從這個多媒體數據庫裡面去取的,並不是從SD卡中取。也就是說,如果開機後增加或刪除了一些多媒體,這個多媒體數據庫是不會自動刷新的。android提供了兩個Intent來發廣播讓系統自動刷新多媒體數據庫,分別是Intent.ACTION_MEDIA_MOUNTED和Intent.Action_MEDIA_SCANNER_SCAN_FILE,前面的是掃描整個SD卡,後面的針對某個文件進行掃描,發了Intent.ACTION_MEDIA_MOUNTED這個廣播後,還可以通過廣播接收器監聽ACTION_MEDIA_SCAN_STARTED和ACTION_MEDAI_SCAN_FINISH這兩個廣播,分別是開始掃描和掃描完畢時系統發出的。進行全卡掃描的話需要3-5秒的時間(我的情況),針對某個文件掃描的沒有試過,呵呵,懶了。最近DLNA的DMC需要用到刷新媒體庫的功能,不然之前一直是要是添加了新的文件,就重啟手機,暈死了。網上搜索了一趟,很多都是建議:
[java]
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath())));
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath())));
可是我試了之後發現,每當我增加或減少了多媒體文件後,我的整個音樂列表都不見了,不知道是哪裡出了原因。後來參考了以下兩位的做法,終於把功能實現了:
我的具體實現是:
[java]
public class MainActivity extends Activity {
private MediaScannerConnection mediaScanConn = null;
private MusicSannerClient client = null;
private File filePath = null;
private String fileType = null;
@SuppressLint("SdCardPath")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
client = new MusicSannerClient();
mediaScanConn = new MediaScannerConnection(this, client);
scanfile(new File("/sdcard"));
}
class MusicSannerClient implements
MediaScannerConnection.MediaScannerConnectionClient {
public void onMediaScannerConnected() {
Log.e("---------", "media service connected");
if (filePath != null) {
if (filePath.isDirectory()) {
File[] files = filePath.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
scanfile(files[i]);
else {
mediaScanConn.scanFile(
files[i].getAbsolutePath(), fileType);
}
}
}
}
}
filePath = null;
fileType = null;
}
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
mediaScanConn.disconnect();
}
}
private void scanfile(File f) {
this.filePath = f;
mediaScanConn.connect();
}
}
public class MainActivity extends Activity {
private MediaScannerConnection mediaScanConn = null;
private MusicSannerClient client = null;
private File filePath = null;
private String fileType = null;
@SuppressLint("SdCardPath")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
client = new MusicSannerClient();
mediaScanConn = new MediaScannerConnection(this, client);
scanfile(new File("/sdcard"));
}
class MusicSannerClient implements
MediaScannerConnection.MediaScannerConnectionClient {
public void onMediaScannerConnected() {
Log.e("---------", "media service connected");
if (filePath != null) {
if (filePath.isDirectory()) {
File[] files = filePath.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
scanfile(files[i]);
else {
mediaScanConn.scanFile(
files[i].getAbsolutePath(), fileType);
}
}
}
}
}
filePath = null;
fileType = null;
}
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
mediaScanConn.disconnect();
}
}
private void scanfile(File f) {
this.filePath = f;
mediaScanConn.connect();
}
}
效果圖源碼KqwOpenCVBlurDemo阈值化是一種將我們想要在圖像中分析的區域分割出來的方法。我們把每個像素值都與一個預設的阈值做比較,再根據比較的結果調整像素值。
下面介紹了Android實現顯示電量的控件代碼,具體代碼如下:1、目錄結構,本人是使用安卓死丟丟。2、運行界面,輸入框中輸入數值,點擊刷新,會再電池中顯示出相應的電量3、
百度一鍵root是一款很簡單清潔的軟件,很適合剛剛接觸root使用的群眾用。root就是讓你的獲取手機權限,然後處理一些手機系統本來無法處理的軟件,讓你的手
一、ViewPageIndicator開源框架的基本用法 我們先得去Github上面下載這個庫,下載地址:https://github.com/JakeWharton/A