package com.android.music; import android.app.Activity; ... public class ScanningProgress extends Activity { private final static int CHECK = 0; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == CHECK) { //检查外存储设备的状态 String status = Environment.getExternalStorageState(); if (!status.equals(Environment.MEDIA_MOUNTED)) { //如果设备已经挂载好,finish此activity并结束消息处理 finish(); return; } Cursor c = MusicUtils.query(ScanningProgress.this, MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, null, null, null, null); if (c != null) { //如果设备未挂载好但是已经可以访问数据库,则向此activity的caller返回一个RESULT_OK消息并结束 c.close(); setResult(RESULT_OK); finish(); return; } //如果设备未准备好,等待3000毫秒再次检查 Message next = obtainMessage(CHECK); sendMessageDelayed(next, 3000); } } }; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setVolumeControlStream(AudioManager.STREAM_MUSIC); //设定音频控制为music requestWindowFeature(Window.FEATURE_NO_TITLE); //设定窗口属性 //检查存储设备是否是可移除设备(如SD卡)。 //isExternalStorageRemovable方法只在API level8以上的sdk中包含 if (android.os.Environment.isExternalStorageRemovable()) { setContentView(R.layout.scanning); } else { setContentView(R.layout.scanning_nosdcard); } getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT); setResult(RESULT_CANCELED); //声明一个CHECK消息并延时1000毫秒发送此消息 Message msg = mHandler.obtainMessage(CHECK); mHandler.sendMessageDelayed(msg, 1000); } @Override public void onDestroy() { //移除消息队列中还处于等待状态的消息 mHandler.removeMessages(CHECK); super.onDestroy(); } }