Android Image Viewer from App

前端 未结 3 2055
闹比i
闹比i 2020-12-30 17:44

I\'m trying to launch an image which is written to my application directory with the builtin Android image viewer. This image has been written in a different part of the app

相关标签:
3条回答
  • 2020-12-30 17:58

    Your image is within your application sandbox, so you should use ContentProvider to give other apps external access to your image data. Keep in mind that in Android, pre-installed apps don't have higher priority than third-party apps - you still have to give permission to your data, even if you want to use the default apps.

    Otherwise, take a look at the Gallery activity's IntentFilter tags in the Camera application, for a reference what Intent you can use to open an image with the default viewer.

    0 讨论(0)
  • 2020-12-30 18:04

    One way is to implement a context provider to give other applications access to your data.

    Create a new class containing:

    public class FileContentProvider extends ContentProvider {
       private static final String URI_PREFIX = "content://uk.co.ashtonbrsc.examplefilecontentprovider";
    
       public static String constructUri(String url) {
           Uri uri = Uri.parse(url);
           return uri.isAbsolute() ? url : URI_PREFIX + url;
       }
    
       @Override
       public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
           File file = new File(uri.getPath());
           ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
           return parcel;
       }
    
       @Override
       public boolean onCreate() {
           return true;
       }
    
       @Override
       public int delete(Uri uri, String s, String[] as) {
           throw new UnsupportedOperationException("Not supported by this provider");
       }
    
       @Override
       public String getType(Uri uri) {
       throw new UnsupportedOperationException("Not supported by this provider");
       }
    
       @Override
       public Uri insert(Uri uri, ContentValues contentvalues) {
           throw new UnsupportedOperationException("Not supported by this provider");
       }
    
       @Override
       public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {
           throw new UnsupportedOperationException("Not supported by this provider");
       }
    
       @Override
       public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {
           throw new UnsupportedOperationException("Not supported by this provider");
       }
    
    }
    

    Add the content provider to your AndroidManifest.xml:

    <provider android:name=".FileContentProvider" android:authorities="uk.co.ashtonbrsc.examplefilecontentprovider" />
    

    You should then be able to use "content://uk.co.ashtonbrsc.examplefilecontentprovider/" + the full path to the image in your ACTION_VIEW intent.

    0 讨论(0)
  • 2020-12-30 18:18

    Option #1: Create a ContentProvider to serve up the file out of your app's private file area, then use an ACTION_VIEW Intent on that content:// Uri.

    Option #2: Move the file to the SD card, and use an ACTION_VIEW Intent on the Uri and also with the appropriate MIME type. Android does not automatically associate file extensions with MIME types, so you need to tell the Intent what sort of MIME type the Uri points to. This is handled for you "automatically" with the ContentProvider.

    0 讨论(0)
提交回复
热议问题