【发布时间】:2014-02-14 06:30:06
【问题描述】:
我有一个简单的 GDK 应用程序,它在 LiveCard 上有一个菜单选项来拍照。我已按照文档中的说明使用与那里的示例非常相似的 FileObserver。但是,一旦文件完成写入,我会尝试将活页夹中的一个方法调用到我的服务,然后它会尝试在 RemoteView 中的 ImageView 上设置图像 uri。
在 AndroidManifest.xml 我有以下权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
菜单活动:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_photo:
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PIC_REQ);
break;
}
return super.onOptionsItemSelected(item);
}
...
private void processPictureWhenReady(final String picturePath) {
final File pictureFile = new File(picturePath);
if (pictureFile.exists()) {
liveCardService.setPicture(picturePath);
}
...
LiveCardService:
public class CompPlayerBinder extends Binder {
public void setPlayerPicture(String picturePath) {
liveCard.unpublish();
RemoteViews view = new RemoteViews(getPackageName(), R.layout.photo_layout);
view.setImageViewUri(R.id.the_photo, Uri.fromFile(new File(picturePath)));
liveCard.setViews(view);
Intent i = new Intent(CompPlayerService.this, MenuActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
liveCard.setAction(PendingIntent.getActivity(Service.this, 0, i, 0));
liveCard.publish(LiveCard.PublishMode.SILENT);
}
}
当我运行它时,我可以拍照,但是当我点击接受时,我的日志中出现以下异常
02-13 22:25:53.750 576-3201/? E/CachedFilesManager:未能 更改文件模式
/mnt/sdcard/thumbnail_cache/t_thumb_20140213_222552_748.jpg java.io.IOException:不允许操作 在 com.google.glass.fs.Filesystem.changeMode(本机方法) 在 com.google.glass.util.CachedFilesManager.save(CachedFilesManager.java:433) 在 com.google.glass.camera.CameraUtils.saveThumbnailToCachedFiles(CameraUtils.java:76) 在 com.google.glass.camera.ApiTakePictureActivity$1.doInBackground(ApiTakePictureActivity.java:110) 在 com.google.glass.camera.ApiTakePictureActivity$1.doInBackground(ApiTakePictureActivity.java:105) 在 android.os.AsyncTask$2.call(AsyncTask.java:273) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 在 java.util.concurrent.FutureTask.run(FutureTask.java:137) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 在 java.lang.Thread.run(Thread.java:856)
【问题讨论】:
-
您的清单中是否有正确的权限?
-
是的,编辑了问题以包括我在清单中拥有的权限,见上文。
标签: android camera google-glass ioexception google-gdk