import RNFetchBlob from 'rn-fetch-blob';
RNFetchBlob.android
.actionViewIntent(
'/storage/emulated/0/Android/data/aaa.bbb.ccc/files/184.apk',
'application/vnd.android.package-archive',
)
.then(() => {
console.log('success');
})
.catch(err => {
console.log('error');
});
在模拟器中,以上代码正常工作,并弹出安装APK界面
在手机(Android 8.1)上,屏幕闪烁白色,然后没有任何内容,并且无法弹出安装界面,没有错误消息
答案 0 :(得分:0)
找出原因,这是库的一个已知错误,并且有一个PR等待合并(回购所有者没有时间表)。这是PR的链接:https://github.com/joltup/rn-fetch-blob/pull/317
因此,基本上,这需要添加到文件android / src / main / java / com / RNFetchBlob / RNFetchBlob.java的第122-123行:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 如果以上方法均无效,请执行以下步骤:覆盖android / src / main / java / com / RNFetchBlob / RNFetchBlob.java中的121行:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 121行 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 122行
答案 1 :(得分:0)
您应该在AndroidMainFest.xml中添加权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
但是由于它是动态权限,因此建议您每次下载并安装APK之前先检查一下它是否具有权限。
在这种情况下,您可以编写一个本机模块,对于动态检查权限,您可以在进入权限集页面后看到此answer
您还可以使用react-native-permission库。
requestInstallUpdate = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.REQUEST_INSTALL_PACKAGES,
{
'title': 'Test App',
'message': 'Test App needs to install updates.'
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("You can now install updates")
return true;
} else {
console.log("App install permission denied")
return false;
}
} catch (err) {
console.warn(err)
return false;
}
}
然后使用您的下载方法
let canInstall = await requestInstallUpdate()
if(canInstall){
//download apk
}