Why Would An Android Open File Intent Hang While Opening An Image?
Solution 1:
I was able to resolve my issue combined with S-Sh's second suggestion of considering the use of FileProvider
. I had to perform some refinements and ended up with the following to work. I also provided links to the sources in which I used.
Context of the solution:
As a note to future readers as to the context of this solution within my Android app, the code below is launched by clicking a "clickable" TableRow
in a TableLayout
. The TableLayout lists each filename and file ID as a TableRow. Once a row is clicked, the onClick
method of the selected TableRow the filename is acquired and the File
class and FileProvider
are used and filename passed to create an Uri
. This Uri is then passed to an openFile(Uri uri)
method I created encapsulating (so-to-speak) the Intent
used to open the file.
Code
Adding of the FileProvider to the AndroidManifest.xml' within the
` tag:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.mistywillow.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
Creating within res
directory the file_paths.xml
and xml
directory (res/xml/):
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="myFiles" path="." />
</paths>
The onClick
capturing the filename and preparing the Uri to be passed to the openFile():
row.setOnClickListener(v -> {
TableRowtablerow= (TableRow) v;
TextViewsample= (TextView) tablerow.getChildAt(1);
Stringresult= sample.getText().toString();
FilefilePaths=newFile(getFilesDir().toString());
FilenewFile=newFile(filePaths, result);
UricontentUri= getUriForFile(getApplicationContext(), "com.mydomain.fileprovider", newFile);
openFile(contentUri);
});
The openFile(Uri uri)
method containing the Intent to open a file:
privatevoidopenFile(Uri uri){
Intentintent=newIntent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 2);
}
Links referenced:
https://developer.android.com/reference/androidx/core/content/FileProvider
FileProvider - IllegalArgumentException: Failed to find configured root
Solution 2:
Try use origin Uri
itself:
intent.setDataAndType(uri, "image/jpeg");
Post a Comment for "Why Would An Android Open File Intent Hang While Opening An Image?"