【问题标题】:ACTION_MEDIA_SCANNER_SCAN_FILE from external sdcard Lollipop+来自外部 sd 卡 Lollipop 的 ACTION_MEDIA_SCANNER_SCAN_FILE
【发布时间】:2016-02-11 18:11:57
【问题描述】:

我有一个问题,这段代码可以完美运行,但如果视频在 sdcard 中,mediaScan 无法删除该视频。 这是一个错误吗?还是特别许可?

    @Override
public void onVideoSelected(final String uri, String mimeType) {

    final AlertDialog.Builder builder = new AlertDialog.Builder(TV.this);
    builder.setTitle("Select");
    builder.setItems(new CharSequence[]
                    {"Play Video", "Remove Video"},
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case 0:
                            Intent intent = new Intent(TV.this, MainActivity.class);
                            intent.putExtra("url", uri);
                            startActivity(intent);
                            break;
                        case 1:

                            File file = new File(uri);
                            file.delete();

                            TV.this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(uri))));

                            break;
                    }
                }
            });
    builder.create().show();
}

编辑:

更多代码:

公共类 VideosFragment 扩展 ContractListFragment 实现 LoaderManager.LoaderCallbacks, SimpleCursorAdapter.ViewBinder { 私有 ImageLoader imageLoader;

@Override
public void onAttach(Activity host) {
    super.onAttach(host);

    ImageLoaderConfiguration ilConfig=
            new ImageLoaderConfiguration.Builder(getActivity()).build();

    imageLoader=ImageLoader.getInstance();
    imageLoader.init(ilConfig);
}

@Override
public void onActivityCreated(Bundle state) {
    super.onActivityCreated(state);

    String[] from=
            { MediaStore.Video.Media.TITLE, MediaStore.Video.Media._ID };
    int[] to= { android.R.id.text1, R.id.thumbnail };
    SimpleCursorAdapter adapter=
            new SimpleCursorAdapter(getActivity(), R.layout.row, null,
                    from, to, 0);

    adapter.setViewBinder(this);
    setListAdapter(adapter);

    getLoaderManager().initLoader(0, null, this);
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    CursorAdapter adapter=(CursorAdapter)getListAdapter();
    Cursor c=(Cursor)adapter.getItem(position);
    int uriColumn=c.getColumnIndex(MediaStore.Video.Media.DATA);
    int mimeTypeColumn=
            c.getColumnIndex(MediaStore.Video.Media.MIME_TYPE);

    getContract().onVideoSelected(c.getString(uriColumn),
            c.getString(mimeTypeColumn));
}

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
    return(new CursorLoader(
            getActivity(),
            MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            null, null, null,
            MediaStore.Video.Media.TITLE));
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
    ((CursorAdapter)getListAdapter()).swapCursor(c);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    ((CursorAdapter)getListAdapter()).swapCursor(null);
}

@Override
public boolean setViewValue(View v, Cursor c, int column) {
    if (column == c.getColumnIndex(MediaStore.Video.Media._ID)) {
        Uri video=
                ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        c.getInt(column));
        DisplayImageOptions opts=new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.ic_media_video_poster)
                .build();

        imageLoader.displayImage(video.toString(), (ImageView)v, opts);

        return(true);
    }

    return(false);
}

interface Contract {
    void onVideoSelected(String uri, String mimeType);
}

}

【问题讨论】:

    标签: android android-intent android-tv android-mediascanner


    【解决方案1】:

    要正确删除已被媒体扫描仪索引的媒体,您应该通过内容提供程序使用删除它。例如:

    getContentResolver().delete(uri, null, null);
    

    【讨论】:

    • 错误:(159, 61) 错误:不兼容的类型:字符串无法转换为 Uri
    • 然后从字符串创建一个 Uri。 Uri u = android.net.Uri.parse(uri)
    • 现在停止应用程序。日志:java.lang.IllegalArgumentException:未知 URL /storage/sdcard1/DCIM/Camera/VID_20160211_190216.mp4
    • 但位置正确。如果我玩。完美运行
    • 所以你说字符串不是uri。这是一个文件路径。 Uri u = android.net.Uri.fromFile(uri)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2011-11-07
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多