CodenameOne:Capture.capturePhoto()请求错误的权限?

时间:2017-08-07 13:51:01

标签: codenameone

CodenameOne的Capture.capturePhoto(1000, -1)似乎可以正常使用Android targetSDKVersion 21权限。但在23日它错误地要求

  

允许[...]访问设备上的照片媒体和文件?

来自用户的权限,但由于android.permission.CAMERA缺失而失败。

(缺少相机的模拟器会改为请求媒体文件 - 可能会出现混淆的内容吗?)

更新(DDMS输出)

08-09 15:13:47.866: W/ActivityManager(1676): Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x4000003 cmp=com.sec.android.app.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/Pictures/XXX/IMG_20170809_151347.jpg} (has extras) } from ProcessRecord{f736f3f 20079:com.XXX/u0a338} (pid=20079, uid=10338) with revoked permission android.permission.CAMERA
08-09 15:13:47.876: W/System.err(20079): java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x4000003 cmp=com.sec.android.app.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/Pictures/XXX/IMG_20170809_151347.jpg} (has extras) } from ProcessRecord{f736f3f 20079:com.XXX/u0a338} (pid=20079, uid=10338) with revoked permission android.permission.CAMERA
08-09 15:13:47.896: E/ConfigFileUtils(3071): Failed to read config file: /data/data/com.google.android.gms/app_chimera/current_modulesets.pb: open failed: ENOENT (No such file or directory)
08-09 15:13:47.906: W/System.err(20079):    at android.os.Parcel.readException(Parcel.java:1620)
08-09 15:13:47.906: W/System.err(20079):    at android.os.Parcel.readException(Parcel.java:1573)
08-09 15:13:47.906: W/System.err(20079):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3131)
08-09 15:13:47.906: W/System.err(20079):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1540)
08-09 15:13:47.906: W/System.err(20079):    at android.app.Activity.startActivityForResult(Activity.java:4283)
08-09 15:13:47.906: W/System.err(20079):    at android.app.Activity.startActivityForResult(Activity.java:4230)
08-09 15:13:47.906: W/System.err(20079):    at com.codename1.impl.android.CodenameOneActivity.startActivityForResult(CodenameOneActivity.java:576)
08-09 15:13:47.906: W/System.err(20079):    at com.codename1.impl.android.c.a(AndroidImplementation.java:5869)
08-09 15:13:47.906: W/System.err(20079):    at com.codename1.u.p.b(Display.java:3109)
08-09 15:13:47.906: W/System.err(20079):    at com.codename1.b.a.a(Capture.java:77)
08-09 15:13:47.906: W/System.err(20079):    at com.codename1.b.a.a(Capture.java:125)
08-09 15:13:47.906: W/System.err(20079):    at com.grandgreat.XXX.ai.b(SettingsForm.java:98)

(SettingsForm.java:98 String path = Capture.capturePhoto(1000, -1);

1 个答案:

答案 0 :(得分:0)

这应该有效,因为我们使用Intent执行捕获的所有工作,因此我们甚至不会请求该权限。请参阅代码here

但是,正如此堆栈溢出问题Android M Camera Intent + permission bug?

所解释的那样

如果该应用具有相机权限,则意图可能无法阻止看似不当的行为。再一次意图系统的可怕边缘情况......

解决方法确实是提示我们将在明天(2017年8月11日)为更新添加相机权限。