Open a selected file (image, pdf, …) programmatically from my Android Application?

后端 未结 9 1905
梦谈多话
梦谈多话 2020-12-02 17:34

I\'m working on an Android application which should be able to open a selected file from a specific folder.

I already tried this, but after selecting which applicati

相关标签:
9条回答
  • 2020-12-02 18:13

    To Open a File in Android Programatically,you can use this code :- We use File Provider for internal file access .You can also see details about File Provider here in this linkfileprovidr1,file provider2,file provider3. Create a File Provider and defined in Manifest File .

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.packagename.app.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
    
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths">
        </meta-data>
    
    </provider>
    

    Define file_path in resources file.

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-path
            name="my_images"
            path="Android/data/com.packagename.app/files/Pictures" />
    
        <external-files-path name="vivalinkComProp" path="Android/data/com.vivalink.app/vivalinkComProp/docs"/>
        <external-path
            name="external"
            path="." />
        <external-files-path
            name="external_files"
            path="." />
        <cache-path
            name="cache"
            path="." />
        <external-cache-path
            name="external_cache"
            path="." />
        <files-path
            name="files"
            path="." />
    
    </paths>
    

    Define Intent For View

    String directory_path = Environment.getExternalStorageDirectory().getPath() + "/MyFile/";
    String targetPdf = directory_path + fileName + ".pdf";
    File filePath = new File(targetPdf);
    
    Intent intentShareFile = new Intent(Intent.ACTION_VIEW);
    File fileWithinMyDir = new File(targetPdf);
    Uri bmpUri = FileProvider.getUriForFile(activity, "com.packagename.app.fileprovider", filePath);
    if (fileWithinMyDir.exists()) {
        intentShareFile.setDataAndType(bmpUri,"application/pdf");
        intentShareFile.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intentShareFile.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(Intent.createChooser(intentShareFile, "Open File Using..."));
    
    }
    

    You can use different way to create a file provider in android . Hope this will help you.

    0 讨论(0)
  • 2020-12-02 18:17

    Try the below code. I am using this code for opening a PDF file. You can use it for other files also.

    File file = new File(Environment.getExternalStorageDirectory(),
                         "Report.pdf");
    Uri path = Uri.fromFile(file);
    Intent pdfOpenintent = new Intent(Intent.ACTION_VIEW);
    pdfOpenintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    pdfOpenintent.setDataAndType(path, "application/pdf");
    try {
        startActivity(pdfOpenintent);
    }
    catch (ActivityNotFoundException e) {
    
    }
    

    If you want to open files, you can change the setDataAndType(path, "application/pdf"). If you want to open different files with the same intent, you can use Intent.createChooser(intent, "Open in...");. For more information, look at How to make an intent with multiple actions.

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

    directly you can use this code it will open all type of files

    Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
        Uri screenshotUri = Uri.fromFile(your_file);
        sharingIntent.setType("image/png");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
        String type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(screenshotUri.toString()));
        sharingIntent.setDataAndType(screenshotUri, type == null ? "text/plain" : type);
        startActivity(Intent.createChooser(sharingIntent, "Share using"));
    
    0 讨论(0)
提交回复
热议问题