[Phonegap+Sencha Touch] 移动开发30、phonegap的camera插件的几个问题

<span style="font-size:14px;">navigator.camera.getPicture(function(uri){
    //得到拍摄的图片路径
}, function(err){}, {
    quality: 70,
    allowEdit: true, //拍摄完进行裁剪编辑
    targetWidth: 250,
    targetHeight: 250,
    destinationType: navigator.camera.DestinationType.FILE_URI,//返回uri
    sourceType: navigator.camera.PictureSourceType.CAMERA,//拍照
    saveToPhotoAlbum: true
});</span>

phonegap的camera插件,在安卓系统上存在几个问题

1、得不到拍摄的照片的真实路径,具体查看博文《移动开发29 安卓navigator.camera.getPicture得到图片的真实路径》

2、targetWidth或者targetHeight大于512像素的时候,拍照并裁剪,app就会崩溃,或者app没反应(网上有人说有的是256像素,我的魅族MX3测试了是512像素)

3、只有在targetWidth == targetHeight的时候,裁剪图片才会限制比例1:1;否则,不能限制裁剪图长和宽的比例,可以调整任意。而我们有时候就是要限制裁剪后图片的长宽比。

4、如果设置了targetWidth和targetHeight为250*250,而实际裁剪的分辨率只有100*100,裁剪得到的图片会有黑边。

解决办法:

1、第一个问题,解决办法查看博文《移动开发29 安卓navigator.camera.getPicture得到图片的真实路径》

2、第二个、第三个和第四个问题,改进如下:

进插件目录,找到此文件,org.apache.cordova.camera\src\android\CameraLauncher.java

307行附近(getImage方法):

if (targetHeight > 0 && targetWidth > 0) { //限制裁减比例
  intent.putExtra("aspectX", targetWidth);
  intent.putExtra("aspectY", targetHeight);
}

361行附近(performCrop方法):

if (targetHeight > 0 && targetWidth > 0) { //限制裁减比例
    cropIntent.putExtra("aspectX", targetWidth);
    cropIntent.putExtra("aspectY", targetHeight);
}
// retrieve data on return
// cropIntent.putExtra("return-data", true);
cropIntent.putExtra("return-data", false); //存为文件而不返回Bitmap数据,解决裁减大图崩溃的现象
cropIntent.putExtra("scale", true); //去除黑边
cropIntent.putExtra("scaleUpIfNeeded", true); //去除黑边

File photo = createCaptureFile(encodingType);
croppedUri = Uri.fromFile(photo);
cropIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, croppedUri); //保存裁剪图为临时文件

674行附近(onActivityResult方法):

/*注释掉下面这段代码
     * Bundle extras = intent.getExtras(); // get the cropped bitmap
     * Bitmap thePic = extras.getParcelable("data"); if (thePic ==
     * null) { this.failPicture("Crop returned no data."); return; }
     *
     * // now save the bitmap to a file OutputStream fOut = null;
     * File temp_file = new File(getTempDirectoryPath(),
     * System.currentTimeMillis() + ".jpg"); try {
     * temp_file.createNewFile(); fOut = new
     * FileOutputStream(temp_file);
     * thePic.compress(Bitmap.CompressFormat.JPEG, this.mQuality,
     * fOut); fOut.flush(); fOut.close(); } catch
     * (FileNotFoundException e) { e.printStackTrace(); } catch
     * (IOException e) { e.printStackTrace(); }
     */
    File photo = createCaptureFile(encodingType);
    File temp_file = new File(getTempDirectoryPath(),
      System.currentTimeMillis() + ".jpg");
    if (photo.exists())
     photo.renameTo(temp_file); //得到裁剪图临时文件

    // // Send Uri back to JavaScript for viewing image
    this.callbackContext
      .success(Uri.fromFile(temp_file).toString());

[Phonegap+Sencha Touch] 移动开发30、phonegap的camera插件的几个问题

时间: 2024-10-13 01:13:46

[Phonegap+Sencha Touch] 移动开发30、phonegap的camera插件的几个问题的相关文章

[Phonegap+Sencha Touch] 移动开发29 安卓navigator.camera.getPicture得到图片的真实路径

phonegap的拍照插件选择图库中的图片,代码如下: navigator.camera.getPicture(function(uri){ console.log(uri);//这里得到图片的uri }, function(err){ console.log(err); }, { quality: 70, destinationType: navigator.camera.DestinationType.FILE_URI, sourceType: navigator.camera.Pictur

[Phonegap+Sencha Touch] 移动开发36 Phonegap/Cordova项目的图标和启动画面(splashscreen)配置

Phonegap/Cordova项目中的config.xml文件,里面配置了下面的内容: <icon gap:platform="android" gap:qualifier="ldpi" src="res/icon/android/icon-36-ldpi.png" /> <icon gap:platform="android" gap:qualifier="mdpi" src=&quo

[Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法

这个现象只出现在phonegap打包sencha touch的wp8.1程序会出现(仅wp8.1,wp8正常),其它js框架我测试了几个(app framework, jquery mobile),好像没有这个问题. 我来描述一下这个现象: 1.运行phonegap打包的wp8程序,打开一个有输入框的界面,如下图: 2.点击输入框,使其弹出软键盘,界面会上移,如下图: 3.点返回键隐藏软键盘(或者点击界面上其它地方隐藏软键盘),此时界面不恢复原位,如下图: 我的一些研究结果: 1.这种现象只出现

[Phonegap+Sencha Touch] 移动开发19 某些安卓手机上弹出消息框 点击后不消失的解决办法

Ext.Msg.alert等弹出框在某些安卓手机上,点击确定后不消失. 原因是: 消息框点击确定后有一段css3 transform动画,动画完成后才会隐藏(display:none).有些奇葩手机就是不一样. 解决办法就是禁用消息框的动画: 方法一: 在app.js的launch方法里面加上 Ext.Msg.defaultAllowedConfig.showAnimation = false Ext.Msg.defaultAllowedConfig.hideAnimation = false

[Phonegap+Sencha Touch] 移动开发18 Sencha Touch项目通过phonegap打包后的程序名字的问题

之前说过 sencha phonegap init com.pushsoft.myapp MyApp 之后打包的程序安装包apk的名字是"MyApp.apk",显示在手机桌面上的程序名称(图标下面的文字)也是"MyApp" 如果要换成其他名字,修改 MyApp\config.xml 文件,把顶部"<name>MyApp</name>"中间MyApp的改成需要的名字. 注意如果xml内容有中文,要改成utf-8编码,注意是文

[Phonegap+Sencha Touch] 移动开发18 Sencha Touch项目通过phonegap打包后的程序名字的问题

之前说过 sencha phonegap init com.pushsoft.myapp MyApp 之后打包的程序安装包apk的名字是"MyApp.apk",显示在手机桌面上的程序名称(图标以下的文字)也是"MyApp" 假设要换成其它名字,改动 MyApp\config.xml 文件,把顶部"<name>MyApp</name>"中间MyApp的改成须要的名字. 注意假设xml内容有中文,要改成utf-8编码,注意是文

[Phonegap+Sencha Touch] 移动开发23 Android和IOS的webview点击穿透的缓解办法

安卓的webview和自带浏览器下有个奇怪的现象. 现象: 1.如果输入框input或者textarea的正上方(z轴方向,即上层)有个div,当点击这个div使得div隐藏了之后,input会得到焦点,导致软键盘弹出. 2.浏览视图点击某个地方切换到编辑视图,如果浏览视图点击的位置 在 编辑视图相应位置有个输入框,那么切换过去之后,编辑页的输入框会自动得到焦点. 这个体验很不舒服. 讨论: 这个不是点击事件的事件冒泡导致的(因为e.stopPropagation()和return false是

[Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容

原文地址:http://blog.csdn.net/lovelyelfpop/article/details/50848524 插件地址:https://github.com/nordnet/cordova-hot-code-push 以下是我对GitHub项目readme的翻译 ---------------------------------------------- Cordova Hot Code Push Plugin 此插件提供了能够使cordova app自己主动更新web内容的功

[Phonegap+Sencha Touch] 移动开发43 WebApp字体图标的制作

Sencha touch从2.2开始,里面用到的图标全部是字体图标(icon font),也就是字体文件里面的字符作为图标来用. 主要特性 字体是矢量的,使用icon font来生成图标相对于基于图片的图标来说,有如下的好处: 自由的变化大小而不失真,适用于不同分辨率和尺寸的屏幕 自由的修改颜色 添加阴影效果 支持图片图标的其它属性,例如,透明度和旋转等等 可以添加text-stroke和background-clip:text等属性,只要浏览器支持 字体图标的用法 我们来看下sencha to