Oreo中的Createchooser,打开文件时出现问题

时间:2019-02-18 07:01:43

标签: java android

在我的应用程序中下载文件后,我尝试打开文件。 我已经做过provider_paths.xml 这就是里面的东西:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>

我已经把它放在我的AndroidManifest.xml

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

这是我的Java代码中的代码,我将其放在BroadcastReceiver中,因此它将在我的应用下载文件后触发,但此代码不起作用。 请帮我怎么了?

int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == cursor.getInt(columnIndex)) {
String uriString = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
File mFile = new File(Objects.requireNonNull(Uri.parse(uriString).getPath()));
myIntent = new Intent();
myIntent.setAction(Intent.ACTION_VIEW);

Uri uri = FileProvider.getUriForFile(MyActivity.this, BuildConfig.APPLICATION_ID + ".provider",mFile);

myIntent.setDataAndType(uri, getMimeType(mFile.getAbsolutePath()));

PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(myIntent, PackageManager.GET_RESOLVED_FILTER);
boolean isIntentSafe = activities.size() > 0;

if (isIntentSafe) {
    //choose app to open
    Intent j = Intent.createChooser(myIntent, "Choose an application to open with:");
    //startActivity(j);
    //if (intent.resolveActivity(getPackageManager()) != null) {
    j.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(j);
    //}
}else {Toast.makeText(getApplicationContext(),"No app can't handle",Toast.LENGTH_LONG).show();}

1 个答案:

答案 0 :(得分:0)

已解决.. 可能会帮助其他搜索如何在android牛轧糖或更高版本中向其他应用程序创建选择器和意图文件的人

我的代码工作正常。 仅添加 这个标志的意图是正确的;这就是我的答案

myIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

再次在我的代码中查看“ myIntent”是否需要标记