我正在解决将裁剪的照片用于裁剪活动的问题.在我的应用程序中,用户可以拍照或从库中选择一个,然后裁剪并上传.一切听起来都很简单.
从图库中选择时,图库应用会返回所选照片的uri,如下所示:
content://media/external/images/media/20
Run Code Online (Sandbox Code Playgroud)
我通过以下代码开始使用此uri进行裁剪活动,一切似乎都可以:
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(uri);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_CODE_CROP);
Run Code Online (Sandbox Code Playgroud)
但是当我拍照时,我只能知道照片的路径:
file:///mnt/sdcard/iBet88.us/IMAGE_20120517_151606.jpg
Run Code Online (Sandbox Code Playgroud)
和Crop Activity不接受这个uri.我尝试了另一种与Content Provider相关的方法:将新捕获的照片添加到ContentProvider,然后通过以下代码获取新的uri in sheme"content:// ...":
// TODO insert to Content Provider
ContentResolver cr = getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.DATA, avatarFilePathTmp.getPath());
contentValues.put(MediaStore.Images.Media.IS_PRIVATE, 0);
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
// TODO get id from Content Provider
String[] projection = {
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA
};
String selectionClause = "" + MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = …Run Code Online (Sandbox Code Playgroud) 首先,对不起我的英语.膨胀布局时我有一个问题:
我有一个自定义视图,从一个名为ButtonHelp的LinearLayout扩展而来.我在名为LoadingActivity的布局上使用该视图.我的下面的代码在每个设备和模拟器上都能很好地工作,除了像三星Galaxy Y这样的QVGA屏幕之外,还有以下错误:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.LoadingActivity}: android.view.InflateException: Binary XML file line #45: Error inflating class com.myapp.customviews.ButtonHelp
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #45: Error inflating class com.myapp.customviews.ButtonHelp
at android.view.LayoutInflater.createView(LayoutInflater.java:518)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
at android.app.Activity.setContentView(Activity.java:1657) …Run Code Online (Sandbox Code Playgroud)