将res资源图片转成Drawable、Bitmap
// 将res下的资源图片转成Bitmap
public Bitmap residToBitmap(int resId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId, null);
return bitmap;
}
// 将res下的资源图片转成Drawable
public Drawable residToDrawable(int resId){
Drawable drawable = getResources().getDrawable(resId);
return drawable;
}
Bitmap与Drawable互转
// 将Bitmap转成Drawable
public Drawable bitmapToDrawable(Bitmap bitmap){
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
return drawable;
}
// 将Drawable转成Bitmap
public Bitmap drawableToBitmap(Drawable drawable){
BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
return bitmap;
}
将Bitmap图片保存到本地
public void saveBitmap(Bitmap bitmap){
if (bitmap != null) {
try {
Date date = new Date();
String strDateFormat = "yyyy-MM-dd_HH-mm-ss";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
// /storage/emulated/0/Android/data/{包名}/cache/xxx.png
File snapShotVideoFile = new File(getExternalCacheDir(), sdf.format(date) + ".png");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(snapShotVideoFile));
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bufferedOutputStream);
bufferedOutputStream.flush();
bufferedOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
Log.d(TAG, "bitmap is null !");
}
}
将本地文件转成Bitmap
public Bitmap fileToBitmap(String filePath){
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
return bitmap;
}
获取本地图片的地址
findViewById(R.id.choos_bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 1);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String imagePath = null;
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
// 判断手机系统版本号
if (Build.VERSION.SDK_INT >= 19) {
// 4.4及以上系统使用这个方法处理图片
imagePath = handleImageOnKitKat(data);
} else {
// 4.4以下系统使用这个方法处理图片
imagePath = handleImageBeforeKitKat(data);
}
}
break;
default:
break;
}
// 图片地址展示到imageView
if (imagePath != null) {
Log.d(TAG, "onActivityResult: "+imagePath);
Bitmap bitmap = fileToBitmap(imagePath);
ImageView test_iv = findViewById(R.id.test_iv);
test_iv.setImageBitmap(bitmap);
} else {
Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show();
}
}
@TargetApi(19)
private String handleImageOnKitKat(Intent data) {
String imagePath = null;
Uri uri = data.getData();
Log.d("TAG", "handleImageOnKitKat: uri is " + uri);
if (DocumentsContract.isDocumentUri(this, uri)) {
// 如果是document类型的Uri,则通过document id处理
String docId = DocumentsContract.getDocumentId(uri);
if("com.android.providers.media.documents".equals(uri.getAuthority())) {
String id = docId.split(":")[1]; // 解析出数字格式的id
String selection = MediaStore.Images.Media._ID + "=" + id;
imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
} else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));
imagePath = getImagePath(contentUri, null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// 如果是content类型的Uri,则使用普通方式处理
imagePath = getImagePath(uri, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
// 如果是file类型的Uri,直接获取图片路径即可
imagePath = uri.getPath();
}
return imagePath;
}
private String handleImageBeforeKitKat(Intent data) {
Uri uri = data.getData();
String imagePath = getImagePath(uri, null);
return imagePath;
}
private String getImagePath(Uri uri, String selection) {
String path = null;
// 通过Uri和selection来获取真实的图片路径
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}
权限申请
清单文件 权限:
// 各个权限, 选择性添加即可:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
申请权限:
protected static final int REQ_PERMISSION_CODE = 0x1000;
protected int mGrantedCount = 0;
protected abstract void onPermissionGranted();
protected boolean checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<String> permissions = new ArrayList<>();
if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)) {
permissions.add(Manifest.permission.CAMERA);
}
if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)) {
permissions.add(Manifest.permission.RECORD_AUDIO);
}
if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissions.size() != 0) {
ActivityCompat.requestPermissions(TRTCBaseActivity.this,
permissions.toArray(new String[0]),
REQ_PERMISSION_CODE);
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQ_PERMISSION_CODE:
for (int ret : grantResults) {
if (PackageManager.PERMISSION_GRANTED == ret) {
mGrantedCount ++;
}
}
if (mGrantedCount == permissions.length) {
onPermissionGranted();
} else {
Toast.makeText(this, getString(R.string.common_please_input_roomid_and_userid), Toast.LENGTH_SHORT).show();
}
mGrantedCount = 0;
break;
default:
break;
}
}
参考郭霖源码:booksource地址