Android相册刷新兼容高版本

核心代码

       File file = new File(photoPath);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

            //方法1:
            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DISPLAY_NAME, file.getName());
            values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
            values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM);
            ContentResolver contentResolver = getContentResolver();
            Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  values);
            if (uri == null) {
                Log.i(tag,"url is  null:");
                return;
            }
            Log.i(tag,"uri is not null:"+uri.getPath());

            try {
                OutputStream outputStream = contentResolver.openOutputStream(uri);
                FileInputStream fileInputStream = new FileInputStream(file);
                FileUtils.copy(fileInputStream, outputStream);
                fileInputStream.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //方法2:看的没啥问题 感觉回退回去了
            //addMediaStore(MainActivity.this,file,file.getAbsolutePath());

        } else {
            //方式1
            MediaScannerConnection.scanFile(
                    getApplicationContext(),
                    new String[]{file.getAbsolutePath()},
                    new String[]{"image/png"},
                    (path, uri) -> {
                        // Scan Completed
                    });
            //方式2
            //context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(targetFile)));
        }

完整例子

package com.szw.phototest;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileUtils;
import android.provider.MediaStore;
import android.renderscript.ScriptGroup;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    public String tag = "szwsb";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn1 = (Button) findViewById(R.id.button1);
        EditText editText = (EditText) findViewById(R.id.edit_text);
        btn1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                editText.setText(getPath());
                String inputText = editText.getText().toString();
                shoot(MainActivity.this);
                Toast tst = Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT);
                tst.show();
                savePhotoAlbum(inputText);
                //得到可用的图片
                Bitmap bitmap = BitmapFactory.decodeFile(inputText);
                ImageView imageView = findViewById(R.id.imageView);
                if (bitmap ==null)
                {
                    Log.i(tag,"bitmap is null");
                }
                //显示
                imageView.setImageBitmap(bitmap);

            }
        });
    }

    private void savePhotoAlbum(String photoPath) {

        File file = new File(photoPath);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

            //方法1:
            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DISPLAY_NAME, file.getName());
            values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
            values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM);
            ContentResolver contentResolver = getContentResolver();
            Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  values);
            if (uri == null) {
                Log.i(tag,"url is  null:");
                return;
            }
            Log.i(tag,"uri is not null:"+uri.getPath());

            try {
                OutputStream outputStream = contentResolver.openOutputStream(uri);
                FileInputStream fileInputStream = new FileInputStream(file);
                FileUtils.copy(fileInputStream, outputStream);
                fileInputStream.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //方法2:看的没啥问题 感觉回退回去了
            //addMediaStore(MainActivity.this,file,file.getAbsolutePath());

        } else {
            //方式1
            MediaScannerConnection.scanFile(
                    getApplicationContext(),
                    new String[]{file.getAbsolutePath()},
                    new String[]{"image/png"},
                    (path, uri) -> {
                        // Scan Completed
                    });
            //方式2
            //context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(targetFile)));
        }
    }

    public  void addMediaStore(Context context, File targetFile, String mpath) {
        方法2:看的没啥问题 感觉回退回去了
        ContentResolver resolver = context.getContentResolver();
        ContentValues newValues = new ContentValues(5);
        newValues.put(MediaStore.Images.Media.DISPLAY_NAME, targetFile.getName());
        newValues.put(MediaStore.Images.Media.DATA, targetFile.getPath());
        newValues.put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis() / 1000);
        newValues.put(MediaStore.Images.Media.SIZE, targetFile.length());
        newValues.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
  
        Uri muri= resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, newValues);
        if (muri != null)
        {
            Log.i(tag,"uri is not null:"+muri.getPath());
        }
    }


    static String newFilePath;
    private static Bitmap takeScreenShot(Activity activity) {
        // View是你需要截图的View
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap b1 = view.getDrawingCache();

        // 获取状态栏高度
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        int statusBarHeight = frame.top;
        Log.i("TAG", "" + statusBarHeight);

        // 获取屏幕长和高
        int width = 1080;
        int height = 1080;
//                activity.getWindowManager().getDefaultDisplay()
//                .getHeight();
        // 去掉标题栏
        // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
        Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height
                - statusBarHeight);
        view.destroyDrawingCache();
        return b;
    }

    // 保存到sdcard
    private static void savePic(Bitmap b, String strFileName) {
        FileOutputStream fos = null;
        try {
//判断是否存在该文件夹和文件,如果没有新建
            File file = new File(strFileName);
            //获取父目录
            File fileParent = file.getParentFile();
            //判断是否存在
            if (!fileParent.exists()) {
//                创建父目录文件
                fileParent.mkdirs();
            }
            file.createNewFile();
            fos = new FileOutputStream(new File(strFileName));
            if (null != fos) {
                b.compress(Bitmap.CompressFormat.PNG, 90, fos);
                fos.flush();
                fos.close();
            }
            Log.i("szwsb","savePic suck");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //用于获取当前最新的截图
    public static String getPath(){
        return newFilePath;
    }
    // 截屏方法
    public static void shoot(Activity a) {
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String fileName = df.format(date)+".png";
        //String sdCardPath = Environment.getExternalStorageDirectory().getPath();
        String apath= a.getBaseContext().getExternalFilesDir( null ).getAbsolutePath();
        //String sdCardPath = a.getBaseContext().getExternalFilesDir(null);
        //String filePath = sdCardPath + File.separator + "xinlv" + File.separator + "Screenshoots"+ File.separator + fileName;
        String filePath = apath + File.separator + "Screenshoots"+ File.separator + fileName;
        newFilePath = filePath;
        savePic(takeScreenShot(a), filePath);
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值