いつもお世話になっています。
端末のあるフォルダ内に入れた画像のサムネイルをViewImageに表示させるサンプルアプリを作りました。
しかし起動してみると「問題が発生したため、アプリを終了します。」と表示され落ちました。
ログを見ると
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=20506, uid=10086 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
とあったので
AndroidManifest.xmlに<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
を追加しましたが、同様の現象と同様のエラーメッセージが発生して解決しません。
何が悪いのかご教授下さい。
Android Stduio: v2.3.3
compileSdkVersion 26
buildToolsVersion "26.0.0"
minSdkVersion 19
targetSdkVersion 26
端末のトップにsampleフォルダを作ってsample.jpgを入れておく
xml
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="example.com.tumbnailsample"> 4 5 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 6 7 <application 8 android:allowBackup="true" 9 android:icon="@mipmap/ic_launcher" 10 android:label="@string/app_name" 11 android:roundIcon="@mipmap/ic_launcher_round" 12 android:supportsRtl="true" 13 android:theme="@style/AppTheme"> 14 <activity android:name=".MainActivity"> 15 <intent-filter> 16 <action android:name="android.intent.action.MAIN"/> 17 18 <category android:name="android.intent.category.LAUNCHER"/> 19 </intent-filter> 20 </activity> 21 </application> 22 23</manifest>
java
1package example.com.tumbnailsample; 2 3import android.content.ContentResolver; 4import android.database.Cursor; 5import android.graphics.Bitmap; 6import android.os.Bundle; 7import android.os.Environment; 8import android.provider.MediaStore; 9import android.support.v7.app.AppCompatActivity; 10import android.widget.ImageView; 11 12public class MainActivity extends AppCompatActivity { 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 19 ImageView imageView = (ImageView)findViewById(R.id.imageView); 20 // データ/キャッシュ/外部ストレージ/システムのパスを取得するにはEnvironmentクラスを使用します 21 String fname = Environment.getExternalStorageDirectory().getPath() + "/sample/sample.jpg"; // ファイルIDの取得 22 23 24 // ファイルIDの取得 25 ContentResolver resolver = getContentResolver(); 26 Cursor cursor = resolver.query( 27 MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // データの種類 28 null, // 項目(null=全項目) 29 MediaStore.Images.ImageColumns.DATA + " = ?", // フィルタ条件(null=フィルタなし) 30 new String[]{fname}, // フィルタ用パラメータ 31 null // ソート 32 ); 33 // cursorの一番最初に移動する 34 if(cursor.moveToFirst()){ 35 // サムネイルの取得 36 long id = cursor.getLong(cursor.getColumnIndex("_id")); 37 Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(resolver, id, MediaStore.Images.Thumbnails.MICRO_KIND, null); 38 imageView.setImageBitmap(thumbnail); 39 } 40 } 41}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/18 03:57