2012-10-10 14 views
8

私は完全に機能しているアプリを持っています。それは私のカメラインテントまたはパーミッションに1つの問題があります。OKボタンを押したときに、Androidのカメラアクティビティがアプリに返されない

ユーザーがボタンを押すと、カメラの動作が開始されます。それは正常に動作しているが、ユーザーがカメラの[OK]ボタンをクリックして画像を受け入れると、アプリに戻ってこない。カメラのキャンセルボタンを押すと、期待通りにアプリに戻ってきます。

私はここで見つけることができるすべての同様の質問を読みましたが、誰も私の問題を解決していません。私は私のアプリで2の間で交互にしたいので、画像を保存する場所をカメラに正確に伝える必要があります。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath)); 
startActivityForResult(intent, 11); 

私は(文字列である)imagePathに複数の値を試してみましたが、カメラのOKボタンは、それらのいずれかで働いていません。ここではカメラの意図を作成し、それを起動するコードです。これらは私が試したパスです:

/mnt/sdcard/<appName>/cameraImages/image1.jpg 
from Environment.getExternalStorageDirectory() 

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg 
from context.getExternalCacheDir() 

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg 
from context.getCacheDir() 

私は私のマニフェストファイルに次の権限を持っている:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> 
<uses-feature android:name="android.hardware.camera.flash" android:required="false" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

君たちは私が私のコードが悪いのかを把握助け、または私に何を伝えることができます有効なパスは?ユーザーがアプリケーションを終了してもイメージが存在し続けることは重要ではないため、イメージがキャッシュの場所に格納されている場合は優先しますが、イメージへのアクセス権を持つユーザーは本当に気にしません。

私はすべてのテストを4.1エミュレータで行い、4.1 SDKでコンパイルしています。私の最小バージョンはAPI 8(2.2)です。

私はonActivityResult()にインテントのケースを入れましたが、問題に影響してはならないため、コードを見る必要はありません。

+0

実デバイスで一度チェックしてください。またチェック[this](http://stackoverflow.com/a/7224771/646806) – RobinHood

+0

'onActivityResult()'が呼び出されていますか?ログに何かが見えますか? –

+0

誰かが 'imagePath'の' context.getCacheDir() 'を使ってアプリのバージョンをチェックしました。カメラアプリの[OK]ボタンは機能しません。また、OKボタンを押すと 'onActivityResult()'が呼び出されません。 – cmasupra

答えて

2

私は問題を突き止めることができました。 Uri.parse(imagePath)の代わりにUri.fromFile(new File(imagePath))を追加する必要があります。同じ問題を抱えている人を助けるために、新しいIntentコードを以下に載せました。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imagePath))); 
startActivityForResult(intent, 11); 

私は今、成功しフルパスimagePathを作成するcontext.getExternalCacheDir()を使用しています。作成したパスは/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpgです。

+0

私はUri.fromFile(新しいファイル(imagePath))を使用していますが、同じ問題を抱えています...その問題を私に教えてください.plz urヘルプは大変ありがとうございます。 –

+0

@NilayOnAndroid 'imagePath'変数があなたのアプリケーションがアクセスできる有効なパスであることを確認してください。 – cmasupra

+1

@ cmasupra - 最初にそのパスを作成するにはmkdirs()が必要でした。しかし、助けてくれてありがとう! –

関連する問題