可以运行的版本
测试4.0到8.1
问题
1,传入的图片与传出图片的位置必须一样才行,否则不能剪辑。
2,使用Google photo剪辑的话,会说无效之类的话,并会让原图大小变成0。
3,不能在onActivityResult获取到bitmap。
假如使用第三方的剪辑不能满足,那可以考虑第三方库。效果
package hello.world.myapplication;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这种uri在7.0 (targetSdkVersion 24)会报错的 内容前面是file的
//debug内容 onCreate: file:///SDCard/1.jpg
Uri testuri = Uri.fromFile(new File("SDCard/1.jpg"));
Log.d(TAG, "onCreate: " + testuri);
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
int size = list.size();
if (size == 0) {
Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
} else {
for (int i = 0; i < size; i++) {
String actname=list.get(i).activityInfo.packageName;
if ("com.google.android.apps.photos".equals(actname)) {
Toast.makeText(this, "不建议用Google Photo编辑", Toast.LENGTH_SHORT).show();
}
}
Toast.makeText(this, "find image crop " + size + "app", Toast.LENGTH_SHORT).show();
File file = new File(Environment.getExternalStorageDirectory() +
"/" + System.currentTimeMillis() + ".jpg");
if (!file.getParentFile().exists())
file.getParentFile().mkdirs();
Uri imageUri = FileProvider.getUriForFile(MainActivity.this,
"hello.world.myapplication.fileprovider",
new File(Environment.getExternalStorageDirectory() + "/a.jpg"));
//通过FileProvider创建一个content类型的Uri
intent.setData(imageUri);
intent.putExtra("crop", "true");//选择剪切
intent.putExtra("scale", false);//不按比例
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);//不能设置其他uri,来什么,输出什么
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", false); // 打开人脸检测
//intent.putExtra("return-data", true);//使用这个就不停转加载不出,返回不了
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//允许读写
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//不指定apk打开
startActivityForResult(intent, 1008);
//指定apk打开
// Intent i = new Intent(intent);
// ResolveInfo res = list.get(0);
// // res.activityInfo.packageName 类似com.htc.photoenhancer
// // res.activityInfo.name 类似com.htc.photoenhancer.CropImage
// i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
// startActivityForResult(i, 1008);
}
}
String TAG = "abc";
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1008) {
if (resultCode == RESULT_OK) {
}
}
}
}
清单文件添加
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
xml文件夹下新建file_path.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="temp" path="." />
</paths>