質問編集履歴

1

ソースコード追加

2023/05/25 04:46

投稿

rstaff
rstaff

スコア2

test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,165 @@
21
21
  imageView.setImageURI(uri);
22
22
  }
23
23
  ```
24
+ ### 20230525 追加
25
+ 整理する為、以下別アクティビティで本件の処理をコーディングしました。
26
+ しかし同様に「★1」の箇所で落ちてしまいました。
27
+ ```
28
+ package com.example.handbook;
29
+
30
+ import androidx.activity.result.ActivityResultLauncher;
31
+ import androidx.activity.result.contract.ActivityResultContracts;
32
+ import androidx.appcompat.app.AppCompatActivity;
33
+
34
+ import android.annotation.SuppressLint;
35
+ import android.content.Context;
36
+ import android.content.Intent;
37
+ import android.content.SharedPreferences;
38
+ import android.graphics.Bitmap;
39
+ import android.graphics.BitmapFactory;
40
+ import android.net.Uri;
41
+ import android.os.Build;
42
+ import android.os.Bundle;
43
+ import android.view.View;
44
+ import android.widget.ImageView;
45
+
46
+ import java.io.BufferedInputStream;
47
+ import java.io.IOException;
48
+ import java.io.InputStream;
49
+
50
+ public class TestActivity1 extends AppCompatActivity implements View.OnClickListener {
51
+ SharedPreferences PreferencesData;
52
+
53
+ @Override
54
+ protected void onCreate(Bundle savedInstanceState) {
55
+ super.onCreate(savedInstanceState);
56
+ setContentView(R.layout.activity_test1);
57
+
58
+ findViewById(R.id.page999PhotoIcon).setOnClickListener(this);
59
+
60
+ ImageView imageView = findViewById(R.id.page999Image);
61
+
62
+ PreferencesData = getSharedPreferences("testData2022aaa", Context.MODE_PRIVATE);
63
+
64
+ String uriStr = PreferencesData.getString("Data999Photo", null);
65
+
66
+ if(uriStr != null) {
67
+ Uri uri = Uri.parse(uriStr);
68
+     ★2
69
+ //Log.d(LOG_TAG, "pref uri=" + uri);
70
+ //imageView.setImageURI(uri);
71
+ try(InputStream is = new BufferedInputStream(getContentResolver().openInputStream(uri))) { ★1
72
+ Bitmap bitmap = BitmapFactory.decodeStream(is);
73
+ imageView.setImageBitmap(bitmap);
74
+ } catch(IOException e) {
75
+ e.printStackTrace();
76
+ }
77
+ }
78
+ }
79
+
80
+ // 各ビューのクリック時の操作処理
81
+ @SuppressLint("ResourceType")
82
+ public void onClick(View v) {
83
+ switch (v.getId()) {
84
+ case R.id.page999PhotoIcon: //P6-1写真アイコンのクリック処理
85
+ //ギャラリーを開く
86
+ launcher999.launch(new String[]{"image/*"});
87
+ break;
88
+
89
+ default:
90
+ break;
91
+ }
92
+ }
93
+
94
+ ActivityResultLauncher<String[]> launcher999 = registerForActivityResult(new ActivityResultContracts.OpenDocument(), uri -> {
95
+ if (uri != null) {
96
+ //写真を表示する
97
+ ImageView imageView = (ImageView) findViewById(R.id.page999Image);
98
+ imageView.setImageURI(uri);
99
+ //パーミッション付与
100
+ if (Build.VERSION.SDK_INT >= 19) {
101
+ getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
102
+ }
103
+ //プレファレンスデータに保存
104
+ PreferencesData.edit().putString("Data999Photo", uri.toString()).commit();
105
+ }
106
+ });
107
+ }
108
+
109
+
110
+ ```
111
+
112
+ Logcatを見ると以下ログが出ました。
113
+ ```
114
+ 2023-05-25 13:22:43.509 2662-2662/com.rapp.handbook E/AndroidRuntime: FATAL EXCEPTION: main
115
+ Process: com.rapp.handbook, PID: 2662
116
+ java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rapp.handbook/com.example.handbook.TestActivity1}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{e328407 2662:com.rapp.handbook/u0a310} (pid=2662, uid=10310) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
117
+ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3641)
118
+ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3798)
119
+ at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
120
+ at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
121
+ at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
122
+ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
123
+ at android.os.Handler.dispatchMessage(Handler.java:106)
124
+ at android.os.Looper.loopOnce(Looper.java:201)
125
+ at android.os.Looper.loop(Looper.java:288)
126
+ at android.app.ActivityThread.main(ActivityThread.java:7902)
127
+ at java.lang.reflect.Method.invoke(Native Method)
128
+ at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:583)
129
+ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1009)
130
+ Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{e328407 2662:com.rapp.handbook/u0a310} (pid=2662, uid=10310) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
131
+ at android.os.Parcel.createExceptionOrNull(Parcel.java:2426)
132
+ at android.os.Parcel.createException(Parcel.java:2410)
133
+ at android.os.Parcel.readException(Parcel.java:2393)
134
+ at android.os.Parcel.readException(Parcel.java:2335)
135
+ at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5853)
136
+ at android.app.ActivityThread.acquireProvider(ActivityThread.java:7036)
137
+ at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:3340)
138
+ at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2561)
139
+ at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2045)
140
+ at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1876)
141
+ at android.content.ContentResolver.openInputStream(ContentResolver.java:1536)
142
+ at com.example.handbook.TestActivity1.onCreate(TestActivity1.java:44)
143
+ at android.app.Activity.performCreate(Activity.java:8049)
144
+ at android.app.Activity.performCreate(Activity.java:8029)
145
+ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1330)
146
+ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3614)
147
+ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3798) 
148
+ at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
149
+ at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
150
+ at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
151
+ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216) 
152
+ at android.os.Handler.dispatchMessage(Handler.java:106) 
153
+ at android.os.Looper.loopOnce(Looper.java:201) 
154
+ at android.os.Looper.loop(Looper.java:288) 
155
+ at android.app.ActivityThread.main(ActivityThread.java:7902) 
156
+ at java.lang.reflect.Method.invoke(Native Method) 
157
+ at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:583) 
158
+ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1009) 
159
+ Caused by: android.os.RemoteException: Remote stack trace:
160
+ at com.android.server.am.ContentProviderHelper.checkAssociationAndPermissionLocked(ContentProviderHelper.java:611)
161
+ at com.android.server.am.ContentProviderHelper.getContentProviderImpl(ContentProviderHelper.java:235)
162
+ at com.android.server.am.ContentProviderHelper.getContentProvider(ContentProviderHelper.java:125)
163
+ at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:6131)
164
+ at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2442)
165
+
166
+ ```
167
+
168
+ Permissionと記載があったので「★2」に以下を追加した所以下Logcatに変わりました。
169
+ getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
170
+ ```
171
+ 2023-05-25 13:21:57.778 2379-2379/com.rapp.handbook E/AndroidRuntime: FATAL EXCEPTION: main
172
+ Process: com.rapp.handbook, PID: 2379
173
+ java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rapp.handbook/com.example.handbook.TestActivity1}: java.lang.SecurityException: No persistable permission grants found for UID 10310 and Uri content://com.android.providers.media.documents/document/image:1000000489
174
+ <文字数制限の為抜粋>
175
+ Caused by: java.lang.SecurityException: No persistable permission grants found for UID 10310 and Uri content://com.android.providers.media.documents/document/image:1000000489
176
+ <文字数制限の為抜粋>
177
+ Caused by: android.os.RemoteException: Remote stack trace:
178
+ <文字数制限の為抜粋>
179
+ ```
180
+
181
+ いまだいまいち原因の特定が分かりません。
182
+ アドバイス頂けると助かります。
24
183
 
25
184
  以上、宜しくお願い致します。
26
185