Android Phonegap上的谷歌眼镜摄像头

Android Phonegap上的谷歌眼镜摄像头,android,cordova,google-glass,Android,Cordova,Google Glass,我被困在这个问题上好几天了,我真的不知道如何解决它。我已经尝试了整个互联网,但似乎没有代码对我起作用。 我想做的是拍张照片,然后把图像发送到我的服务器。 我这样做的方式是:我调用navigator.camera.getPicture方法来拍摄照片,如果没有问题,我会将其发送到服务器,但始终会调用错误回调,即使照片已拍摄并存储在设备上。 这是我的index.html <!DOCTYPE html> <html> <head> <m

我被困在这个问题上好几天了,我真的不知道如何解决它。我已经尝试了整个互联网,但似乎没有代码对我起作用。 我想做的是拍张照片,然后把图像发送到我的服务器。 我这样做的方式是:我调用navigator.camera.getPicture方法来拍摄照片,如果没有问题,我会将其发送到服务器,但始终会调用错误回调,即使照片已拍摄并存储在设备上。 这是我的index.html

<!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <title>Camera</title>
    </head>
    <body>
        <script type="text/javascript" src="cordova-2.7.0.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript">

            // Initialize the application
            app.initialize();

            // Listen for 'touchpad' events, which get registered as keydown events with keyCode 9 and 13
            document.addEventListener('keydown',keyController);

            // Wait for PhoneGap to load
            document.addEventListener("deviceready", onDeviceReady, false);

            // PhoneGap is ready
            function onDeviceReady() {}

            // Called if something bad happens.
            function captureError(error) 
            {
                console.log("ERROOOOOOOOOOOOOOOOOOOOOOOR");
            }

            function captureImage() 
            {
                navigator.camera.getPicture(onPhotoUriSuccess, captureError, { quality: 50, destinationType: navigator.camera.DestinationType.FILE_URI });
            }

            function onPhotoUriSuccess(imageUriToUpload)
            {
                var url=encodeURI("http://ec2-54-186-34-253.us-west-2.compute.amazonaws.com/upload.php");

                var options = new FileUploadOptions();
                options.fileName = imageUriToUpload.substr(imageUriToUpload.lastIndexOf('/')+1);
                options.mimeType = "image/jpeg";
                options.chunkedMode = true; //this is important to send both data and files

                var ft = new FileTransfer();
                ft.upload(imageUriToUpload, url, function(success){console.log("sucess")}, function(error){console.log("error")}, options);

            }

            //Takes care of touch input
            function keyController(e)
            {
                // Show results in document body
                //document.body.innerHTML = e.keyCode;
                console.log("keyController");
                captureImage();
            }

            // Show results in document body
            function onError() 
            {    
                document.body.innerHTML = 'error';
            }
        </script>
    </body>
</html>

照相机
//初始化应用程序
app.initialize();
//收听“touchpad”事件,这些事件被注册为按键下事件,并使用按键代码9和13
文件。添加了监听器(“键控器”,键控器);
//等待PhoneGap加载
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//PhoneGap已经准备好了
函数ondevicerady(){}
//如果有什么不好的事情发生了就打电话。
函数captureError(错误)
{
控制台日志(“erroooor”);
}
函数captureImage()
{
navigator.camera.getPicture(onPhotoUriSuccess,captureError,{quality:50,destinationType:navigator.camera.destinationType.FILE_URI});
}
函数onPhotoUriSuccess(imageUriToUpload)
{
var url=encodeURI(“http://ec2-54-186-34-253.us-west-2.compute.amazonaws.com/upload.php");
var options=new FileUploadOptions();
options.fileName=imageUriToUpload.substr(imageUriToUpload.lastIndexOf('/')+1);
options.mimeType=“image/jpeg”;
options.chunkedMode=true;//这对于发送数据和文件很重要
var ft=新文件传输();
ft.upload(imageUriToUpload、url、函数(成功){console.log(“成功”)}、函数(错误){console.log(“错误”)}、选项);
}
//负责触摸输入
功能键控制器(e)
{
//在文档体中显示结果
//document.body.innerHTML=e.keyCode;
控制台日志(“keyController”);
captureImage();
}
//在文档体中显示结果
函数onError()
{    
document.body.innerHTML='error';
}
我忘记发布错误:

04-13 00:48:32.188: E/JHEAD(8586): can't open '/mnt/sdcard/Android/data/org.apache.cordova.example/cache/.Pic.jpg'
04-13 00:48:32.195: W/System.err(8586): java.io.FileNotFoundException: /mnt/sdcard/Android/data/org.apache.cordova.example/cache/.Pic.jpg: open failed: ENOENT (No such file or directory)
04-13 00:48:32.195: W/System.err(8586):     at libcore.io.IoBridge.open(IoBridge.java:406)
04-13 00:48:32.195: W/System.err(8586):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
04-13 00:48:32.195: W/System.err(8586):     at java.io.FileInputStream.<init>(FileInputStream.java:105)
04-13 00:48:32.195: W/System.err(8586):     at org.apache.cordova.FileHelper.getInputStreamFromUriString(FileHelper.java:101)
04-13 00:48:32.195: W/System.err(8586):     at org.apache.cordova.CameraLauncher.getScaledBitmap(CameraLauncher.java:582)
04-13 00:48:32.195: W/System.err(8586):     at org.apache.cordova.CameraLauncher.onActivityResult(CameraLauncher.java:335)
04-13 00:48:32.195: W/System.err(8586):     at org.apache.cordova.DroidGap.onActivityResult(DroidGap.java:864)
04-13 00:48:32.195: W/System.err(8586):     at android.app.Activity.dispatchActivityResult(Activity.java:4654)
04-13 00:48:32.195: W/System.err(8586):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
04-13 00:48:32.203: W/System.err(8586):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
04-13 00:48:32.203: W/System.err(8586):     at android.app.ActivityThread.access$1100(ActivityThread.java:123)
04-13 00:48:32.203: W/System.err(8586):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
04-13 00:48:32.203: W/System.err(8586):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 00:48:32.203: W/System.err(8586):     at android.os.Looper.loop(Looper.java:137)
04-13 00:48:32.211: W/System.err(8586):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-13 00:48:32.211: W/System.err(8586):     at java.lang.reflect.Method.invokeNative(Native Method)
04-13 00:48:32.211: W/System.err(8586):     at java.lang.reflect.Method.invoke(Method.java:511)
04-13 00:48:32.211: W/System.err(8586):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-13 00:48:32.211: W/System.err(8586):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-13 00:48:32.211: W/System.err(8586):     at dalvik.system.NativeStart.main(Native Method)
04-13 00:48:32.219: W/System.err(8586): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
04-13 00:48:32.227: W/System.err(8586):     at libcore.io.Posix.open(Native Method)
04-13 00:48:32.227: W/System.err(8586):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
04-13 00:48:32.234: W/System.err(8586):     at libcore.io.IoBridge.open(IoBridge.java:390)
04-13 00:48:32.234: W/System.err(8586):     ... 19 more
04-13 00:48:32.188:E/JHEAD(8586):无法打开“/mnt/sdcard/Android/data/org.apache.cordova.example/cache/.Pic.jpg”
04-13 00:48:32.195:W/System.err(8586):java.io.FileNotFoundException:/mnt/sdcard/Android/data/org.apache.cordova.example/cache/.Pic.jpg:open failed:enoint(没有这样的文件或目录)
04-13 00:48:32.195:W/System.err(8586):位于libcore.io.IoBridge.open(IoBridge.java:406)
04-13 00:48:32.195:W/System.err(8586):位于java.io.FileInputStream。(FileInputStream.java:78)
04-13 00:48:32.195:W/System.err(8586):位于java.io.FileInputStream。(FileInputStream.java:105)
04-13 00:48:32.195:W/System.err(8586):位于org.apache.cordova.FileHelper.getInputStreamFromUristing(FileHelper.java:101)
04-13 00:48:32.195:W/System.err(8586):位于org.apache.cordova.CameraLauncher.getscaledb位图(CameraLauncher.java:582)
04-13 00:48:32.195:W/System.err(8586):位于org.apache.cordova.CameraLauncher.onActivityResult(CameraLauncher.java:335)
04-13 00:48:32.195:W/System.err(8586):位于org.apache.cordova.DroidGap.onActivityResult(DroidGap.java:864)
04-13 00:48:32.195:W/System.err(8586):在android.app.Activity.dispatchActivityResult(Activity.java:4654)
04-13 00:48:32.195:W/System.err(8586):在android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
04-13 00:48:32.203:W/System.err(8586):在android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
04-13 00:48:32.203:W/System.err(8586):位于android.app.ActivityThread.access$1100(ActivityThread.java:123)
04-13 00:48:32.203:W/System.err(8586):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
04-13 00:48:32.203:W/System.err(8586):位于android.os.Handler.dispatchMessage(Handler.java:99)
04-13 00:48:32.203:W/System.err(8586):位于android.os.Looper.loop(Looper.java:137)
04-13 00:48:32.211:W/System.err(8586):位于android.app.ActivityThread.main(ActivityThread.java:4424)
04-13 00:48:32.211:W/System.err(8586):位于java.lang.reflect.Method.invokenactive(本机方法)
04-13 00:48:32.211:W/System.err(8586):位于java.lang.reflect.Method.invoke(Method.java:511)
04-13 00:48:32.211:W/System.err(8586):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-13 00:48:32.211:W/System.err(8586):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-13 00:48:32.211:W/System.err(8586):在dalvik.System.NativeStart.main(本机方法)
04-13 00:48:32.219:W/System.err(8586):原因:libcore.io.ErrnoException:open失败:enoint(没有这样的文件或目录)
04-13 00:48:32.227:W/System.err(8586):位于libcore.io.Posix.open(本机方法)
04-13 00:48:32.227:W/System.err(8586):位于libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
04-13 00:48:32.234:W/System.err(8586):位于libcore.io.IoBridge.open(IoBridge.java:390)
04-13 00:48:32.234:W/系统错误(8586):。。。还有19个

也许,您的权限列表中缺少了
写入外部存储。没有它,应用程序将无法写入jpg文件

我遇到了这个问题,我从中得到了答案 祝你好运