MyExternalStorageReceiver
package com.rishiqing.receiver; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.IntentFilter; import android.content.DialogInterface.OnDismissListener; import android.content.Intent; import android.os.Environment; import android.util.Log; import com.rishiqing.activity.LuncherActivity; import com.rishiqing.utils.LogUtil; public class MyExternalStorageReceiver extends BroadcastReceiver { private static String TAG = MyExternalStorageReceiver.class.getName(); private Context mContext; public MyExternalStorageReceiver(Context c) { LogUtil.e(TAG, "MyExternalStorageReceiver~~~~"); this.mContext = c; IntentFilter intentFilter = new IntentFilter( Intent.ACTION_MEDIA_MOUNTED); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED); intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL); mContext.registerReceiver(this, intentFilter); } @Override public void onReceive(Context context, Intent intent) { LogUtil.e(TAG, "onReceive~~~~"); ifSDStateFalse(); } public void ifSDStateFalse() { AlertDialog mAlertDialog = null; // TODO Auto-generated method stub if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED) == true) { mAlertDialog = new AlertDialog.Builder(mContext) .setMessage("系统未检测到sd卡,将强制退出").show(); mAlertDialog.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { Intent i = new Intent(); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.setClass(mContext, LuncherActivity.class); i.putExtra("isFinish", 1); mContext.startActivity(i); } }); } else if(Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED) == true){ if(mAlertDialog!=null && mAlertDialog.isShowing()) mAlertDialog.dismiss(); } } public void unregister() { Log.d(TAG, "unregister()"); mContext.unregisterReceiver(this); } }
以上代码看起来,感觉已经很完整了,但是onReceive怎么都无法被调用。
最后发现在intentFilter中加上了intentFilter.addDataScheme("file");这样才起作用(line 30)