質問編集履歴
1
ソースコード追加
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
|
|