用于打开pdf文件的Android intent filer

时间:2017-11-07 01:58:47

标签: android intentfilter

我将我的pdf查看器应用添加到"使用"完成操作pdf文件列表。但如果我在列表上运行一个文件,应用程序就会关闭。

我在onCreate方法和清单文件中进行了意图过滤,但我无法弄清楚如何修复此错误。

PdfActivity.java

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pdf); //xml file for pdf view page

    Intent intent = getIntent();

    if(intent != null) {
        if(Intent.ACTION_VIEW.equals(intent.getAction())) {
            startActivity(intent);
        }
    }

    init();
}

的AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".PdfActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="content" />
            <data android:scheme="file" />
            <data android:mimeType="application/pdf" />
        </intent-filter>
    </activity>

</application>

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

试试这个

  //Method to generate a MIME Type
  private static String getMimeType(String url) {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }
    return type;
}

 //Method to generate File URI
 private static Uri getFileUri(String filePath) {
    Uri fileUri = null;
    File file = new File(filePath);
    try {
        if (Build.VERSION.SDK_INT >= 24) {
            Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
            m.invoke(null);
        }
        fileUri = Uri.fromFile(file);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return fileUri;
}


 //Intent
 Intent intent = new Intent(Intent.ACTION_VIEW);
 intent.setDataAndType(getFileUri(file_path), getMimeType(file_path));
 startActivity(intent);