32628


ほんきで学ぶAndroidアプリ開発入門という本でAndroid開発を学んでいます  
今はIntentを使ったアプリの連携を学んでいるのですが、  
カメラを使う連携でどうしてもエラーが出てしまいます。  
オプションメニューで選ばれたときにカメラを呼び出し、写真を撮り  
撮った写真を表示するというプログラムなのですが、  
まずMainActivity.javaに次のようなコードを追加しました

[code]

    private Uri mImgUri;
    
[/code]

/**/

[code]

    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);
            }
        }
    
[/code]

そしてAndroidManifest.xmlに次の→ ←の所のコードを追加しました

[code]

    <?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>
    
[/code]

このプログラムを実行したとき出るエラーは次の通りです

[code]

    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)
    
[/code]

エラーが出ているのはMainActivity.javaの

[code]

    mImgUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
    
[/code]

このコードのところでおきているようです。

自分で調べて見た所、パーミッションが無いといわれており、AndroidManifest.xmlにパーミッションを追加すればいいらしいのですが、うまくいきません

どなたかご助言お願いいたします。


CC BY-SA 3.0
2017-02-13T07:36:15.100
32624
2017-02-13T08:22:06.830
20599
question
android java camera
Android アプリ開発での Intentを使ったカメラ連携でのエラー　Permission？


WRITE_EXTERNAL_STORAGEの様なPermissionはDangerousPermissionと呼ばれており、  
Manifestへの記載のほか(Android6.0以降では)ユーザーの許可が必要です。

実装方法の詳細は下記に記載されておりますが。  
<https://developer.android.com/training/permissions/requesting.html>

とりあえず動くところを試したいのであれば  
設定＞アプリ＞(目的のアプリタップ)＞権限  
から許可してあげれば動くと思います。


CC BY-SA 3.0
2017-02-13T08:22:06.830
32628
2017-02-13T08:22:06.830
19716
32624
answer