LiveCard에서 사진을 찍을 수있는 메뉴 옵션이있는 간단한 GDK 앱이 있습니다. 필자는 FileObserver를 사용하기 위해 설명서의 지침을 예제와 매우 유사하게 사용했습니다. 그러나 파일 쓰기가 끝나면 바인더에서 메서드를 호출하여 내 서비스로 보내려고 시도합니다.이 서비스는 RemoteView의 ImageView에 이미지 URI를 설정하려고 시도합니다. 의 AndroidManifest.xml에서 LiveCard 서비스에서 촬영 한 사진에 액세스하려고 할 때 IOException이 발생했습니다.
나는 다음과 같은 권한이 있습니다<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" />
MenuActivity :
@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) at com.google.glass.camera.ApiTakePictureActivity $ 1.doInBackground (ApiTakePictureActivity.java:105) android.os.Async 작업 $ 2.call (AsyncTask.java:273) at java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305) at 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)
매니페스트에 올바른 권한이 있습니까? –
예, 위의 내용을 참조하여 매니페스트에있는 권한을 포함하도록 수정했습니다. – Ben