我在Phonegap 1.4.1上收到错误。
我创建的phonegap应用程序在我拍照后返回应用程序后重新启动。
以下是我正在使用的代码:
function capturePhoto() {
// Take picture using device camera and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI });
}
function onPhotoURISuccess(imageURI) {
// Uncomment to view the image file URI
// console.log(imageURI);
// Get image handle
//
var largeImage = document.getElementById('largeImage');
// Unhide image elements
//
largeImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
largeImage.src = imageURI;
}
答案 0 :(得分:4)
我在2天内遇到同样的问题,直到我知道您应该获得获取设备中的图像文件的权限。默认情况下,没有返回图像的权限,因此它返回null并且您的应用程序崩溃。
如果您在XCode中使用Cordova / PhoneGap,那么您还应该在www文件夹中创建Config.xml文件并授予访问该图像文件的权限。
<feature name="http://api.phonegap.com/1.0/device" />
<feature name="http://api.phonegap.com/1.0/battery"/>
<feature name="http://api.phonegap.com/1.0/camera"/>
<feature name="http://api.phonegap.com/1.0/contacts"/>
<feature name="http://api.phonegap.com/1.0/file"/>
<feature name="http://api.phonegap.com/1.0/geolocation"/>
<feature name="http://api.phonegap.com/1.0/media"/>
<feature name="http://api.phonegap.com/1.0/network"/>
<feature name="http://api.phonegap.com/1.0/notification"/>
如果您正在使用Android,请在AndroidManifest.xml文件上授予权限。
您可以在此处找到config.xml文件的所有内容: https://build.phonegap.com/docs/config-xml
答案 1 :(得分:2)
使用foreground-camera-plugin会解决这个问题:
答案 2 :(得分:2)
这是我的建议
1.更换cramer插件,避免使用自定义插件启动垃圾回收,(http://code.google.com/p/foreground-camera-plugin/,http://code.google.com/p/foreground-gallery-插件/) 2.如果不足以杀死其他进程,则检测内存,活动释放内存 3.提高生存率,尽量避免在所选系统中释放内存。
private void clearMemory(boolean killAll)
{
mklog("当前系统可用内存大小是:" + getAvailMemory(getApplicationContext()));
ActivityManager activityManger = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = activityManger
.getRunningAppProcesses();
if (list != null)
for (int i = 0; i < list.size(); i++)
{
ActivityManager.RunningAppProcessInfo apinfo = list.get(i);
System.out.println("pid " + apinfo.pid);
System.out.println("processName "
+ apinfo.processName);
System.out
.println("importance " + apinfo.importance);
String[] pkgList = apinfo.pkgList;
if (apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND
|| (killAll && apinfo.importance >= ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE))
{
// Process.killProcess(apinfo.pid);
for (int j = 0; j < pkgList.length; j++)
{
activityManger.killBackgroundProcesses(pkgList[j]);
mklog("准备杀死进程:" + pkgList[j]);
}
}
}
mklog("清理之后 当前系统可用内存大小是:" + getAvailMemory(getApplicationContext()));
}
private long getAvailMemory(Context context)
{
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
return mi.availMem / (1024 * 1024);
}
public void mklog(String contentString)
{
Log.i("Web Console", contentString);
}
答案 3 :(得分:1)
确保AndroidManifest.xml中的活动代码具有以下属性:
android:configChanges="orientation|keyboardHidden"
方向更改将导致您的应用重新加载。如果您实际上遇到了崩溃,请运行“adb logcat”来捕获正在发生的错误。
答案 4 :(得分:1)
这个问题实际上并不是关于Phonegap的。这也是本机Android应用程序的常见问题。
答案 5 :(得分:1)
降低到25并使用<preference name="android-minSdkVersion" value="7" />
帮助了我!
答案 6 :(得分:0)
对我来说,诀窍是修改清单:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14"/>
到
<uses-sdk android:minSdkVersion="7" />
它现在有效,但我不知道为什么......
答案 7 :(得分:0)
我有三星Galaxy Note II。我有同样的问题。我在AndroidManifest.xml中对此进行了更改,现在它适用于Samsung和HTC Thunderbolt
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/>
<activity android:configChanges="orientation|keyboardHidden" />
答案 8 :(得分:0)
DATA_URI ,它不会返回应用。因为 DATA_URI 给出了base64字符串,所以有些设备没有足够的内存。仅使用 FILE_URI ,它对于Android设备是安全的。
如果您需要Base64字符串,则意味着您在使用文件readAsDataURL
调用captureSuccess后进行隐蔽答案 9 :(得分:-1)
尝试将质量参数降低到25.某些设备的内存不足50。