从服务上下文使用fileProvider

时间:2018-08-14 07:39:41

标签: android android-intent android-fileprovider

我想显示一个通知,当用户单击时安装一个APK文件。 我知道如何使用fileProvider本身,但是 service 上下文存在问题。

这是我的代码 清单:

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

filePaths:

<paths>
    <external-path
        name="externalFiles"
        path="." />
</paths>

服务代码:

resultIntent = new Intent(Intent.ACTION_VIEW);
                        Uri uri;
                        File file = FileHelper.getApkFile(item.getLink());
                        if (Build.VERSION.SDK_INT >= 24) {
                            uri = FileProvider.getUriForFile(
                                    NotificationService.this,
                                    NotificationService.this.getApplicationContext().getPackageName(),
                                    file);
                            NotificationService.this.setResult(Activity.RESULT_OK,
                                    resultIntent);
                        } else {
                            uri = Uri.fromFile(file);
                        }


                        resultIntent.setDataAndType(uri, "application/vnd.android.package-archive");
                        resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

您知道 setResult()在服务中不可用。

如何从服务上下文授予权限?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

我发现了问题

我必须将此权限添加到清单中才能安装apk文件。

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />