Android アプリ開発での Intentを使ったカメラ連携でのエラー Permission?
ほんきで学ぶAndroidアプリ開発入門という本でAndroid開発を学んでいます
今はIntentを使ったアプリの連携を学んでいるのですが、
カメラを使う連携でどうしてもエラーが出てしまいます。
オプションメニューで選ばれたときにカメラを呼び出し、写真を撮り
撮った写真を表示するというプログラムなのですが、
まずMainActivity.javaに次のようなコードを追加しました
private Uri mImgUri;
/**/
if(itemId == R.id.action_camera){
String fileName = System.currentTimeMillis()+".jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE,fileName);
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
Log.v("test",fileName);
mImgUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,mImgUri);
Log.v("test","test1");
startActivityForResult(intent,100);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode ==100){
//ImageViewに表示する場合
ImageView imageView =(ImageView)findViewById(R.id.imageview);
imageView.setImageURI(mImgUri);
}
}
そしてAndroidManifest.xmlに次の→ ←の所のコードを追加しました
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kayosystem.honki.chapter06.lesson25" >
→ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> ←
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
このプログラムを実行したとき出るエラーは次の通りです
02-13 15:31:53.306 14237-14237/com.kayosystem.honki.chapter06.lesson25 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kayosystem.honki.chapter06.lesson25, PID: 14237
java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=14237, uid=10364 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1688)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:482)
at android.content.ContentResolver.insert(ContentResolver.java:1277)
at com.kayosystem.honki.chapter06.lesson25.MainActivity.onOptionsItemSelected(MainActivity.java:95)
at android.app.Activity.onMenuItemSelected(Activity.java:3245)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:406)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103)
at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:667)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957)
at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:127)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1219)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3191)
at android.widget.AbsListView$3.run(AbsListView.java:4139)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:6223)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
エラーが出ているのはMainActivity.javaの
mImgUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
このコードのところでおきているようです。
自分で調べて見た所、パーミッションが無いといわれており、AndroidManifest.xmlにパーミッションを追加すればいいらしいのですが、うまくいきません
どなたかご助言お願いいたします。