解决录音文件丢失问题
16lz
2022-06-16
--- a/packages/apps/SoundRecorder/src/com/android/soundrecorder/Recorder.java+++ b/packages/apps/SoundRecorder/src/com/android/soundrecorder/Recorder.java@@ -9,6 +9,11 @@ import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.storage.StorageManager; +import android.provider.MediaStore;+import android.net.Uri;+import android.database.Cursor;+import android.content.ContentResolver;+ import com.mediatek.featureoption.FeatureOption; import java.io.File;@@ -276,6 +281,54 @@ public class Recorder implements OnCompletionListener { signalStateChanged(IDLE_STATE); } + /**+ * <p>+ * Check file from Media DB, if the file is add by media scanner .+ * @param context+ * @param file+ * @return return true if exited in Media DB,else return fasle.+ */+ private boolean checkFromMediaDB(Context context ,File file ) { + Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;+ final String[] ids = new String[]{MediaStore.Audio.Media._ID};+ final String where = MediaStore.Audio.Media.DATA+ + " LIKE '%"+ + file.getAbsolutePath().replaceFirst(+ "file:///", "") + "'";++ Cursor cursor = query(context,base, ids, where, null, null);+ try {+ return null != cursor && cursor.getCount() > 0;+ } catch (IllegalStateException e) {+ e.printStackTrace();+ } finally {+ if (cursor != null) {+ cursor.close();+ }+ }+ return false;+ }+ + /*+ * A simple utility to do a query into the databases.+ */+ private Cursor query(Context context, Uri uri, String[] projection, String selection,+ String[] selectionArgs, String sortOrder) {++ try {+ ContentResolver resolver = context.getContentResolver();+ if (resolver == null) {+ return null;+ }+ return resolver.query(uri, projection, selection, selectionArgs,+ sortOrder);++ } catch (UnsupportedOperationException ex) {+ return null;+ }+ }+ public void startRecording(int outputfileformat, int recordingType, String extension, Context context) { SRLogUtils.i(TAG, "in startRecording() 4 param");@@ -284,9 +337,14 @@ public class Recorder implements OnCompletionListener { && mSampleFile.exists() && !(mSoundRecorderDoWhat != null && mSoundRecorderDoWhat .equals(SoundRecorder.PLAY))) {- if (!mSampleFile.delete()) {- SRLogUtils.i(TAG, "<startRecording> delete file fail");+ //if the file is existing in media db, don't delete it.+ if(!checkFromMediaDB(context,mSampleFile)){+ if (!mSampleFile.delete()) {+ SRLogUtils.i(TAG, "<startRecording> delete file fail");+ } }+ //End } stop();
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer