Durante o processo de atualização em questão 8.0 Baixar encontrado, o download está completo pacote de instalação não atualiza após a página de salto
que a permissão para instalar aplicativos desconhecidos no Android 8.0 é o interruptor estiver desligado por padrão, exigindo que o usuário manualmente ligar o Permitir
aplicativo de origem desconhecida [ autoridade] para ser capaz de instalar. Para segurança Google Android pode ser descrito como mais e mais rigoroso.
Veja como lidar com
1, o aumento pedido permissão para instalar no arquivo de manifesto
<uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
2, principalmente através deste método para determinar se deve obter permissão para instalar
haveInstallPermission = getPackageManager().canRequestPackageInstalls();
Se haveInstallPermission verdade, o aplicativo obteve permissão para instalar aplicativos de fontes desconhecidas, você pode executar a lógica apropriada instalar aplicativos diretamente.
Se false haveInstallPermission, a aplicação não obter permissão para instalar aplicativos de fontes desconhecidas, você não pode instalar o aplicativo. Uma vez que este não é permissão para instalar as permissões de tempo de execução, para que o código não podem mais solicitar permissão, jogando apenas um diálogo de aviso, informar os usuários precisam instalar autoridade, confirmou o salto para definir a interface de permissões abertas.
3, não obteve permissão, você precisa ir manualmente para "Configurações de página correspondente à aplicação." Isso permite que página de configurações de instalação permite ao usuário verificar manualmente
// 注意这个是8.0新API需要判断
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Uri packageURI = Uri.parse("package:" + Context.getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, REQUEST_CODE_INSTALL_PERMISSION);
}
De acordo com o nome do pacote para entrar na página de configurações desta aplicação, não vai passar, em seguida, entrará em uma lista de todas as configurações
(dicas: valor resultCode == RESULT_OK retornará false se o onActivityResult voltou depois de entrar na lista é definida)
lógica completa:
private static final int REQUEST_CODE_INSTALL_PERMISSION = 107;
/**
* 安装应用的流程 大于8.0需要用户手动打开未知来源安装权限
* 需要在清单文件中加入权限 REQUEST_INSTALL_PACKAGES
*/
private void installProcess() {
boolean haveInstallPermission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
haveInstallPermission = getPackageManager().canRequestPackageInstalls();
if (!haveInstallPermission) {
//没有未知来源安装权限权限
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("安装应用需要打开未知来源权限,请去设置中开启应用权限,以允许安装来自此来源的应用");
builder.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startInstallPermissionSettingActivity();
}
}
});
builder.show();
return;//防止系统执行默认的方法会跳转页面后弹窗提示,所以会重复 return 掉
}
}
installApk();
}
/**
* 有权限,开始安装应用程序
*/
private void installApk() {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
/* intent.setDataAndType(Uri.fromFile(new File(getDownloadTempFileName())),
"application/vnd.android.package-archive");*/
//适配Android 7.0 FileProvider文件访问,这里可能需要你修改成自己的访问方式
FileProvider7.setIntentDataAndType(CompulsiveHelperActivity.this,
intent, "application/vnd.android.package-archive", new File(getDownloadTempFileName()), true);
startActivity(intent);
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity() {
//注意这个是8.0新API
Uri packageURI = Uri.parse("package:" + getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, REQUEST_CODE_INSTALL_PERMISSION);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_INSTALL_PERMISSION) {
installProcess();//再次执行安装流程,包含权限判等
}
}
dicas
(1), antes de baixar o aplicativo, você deve cumprir com as permissões de acesso para ler e escrever privilégios para executar 6.0
(2), exigem a adaptação processo de necessidade de acesso 7.0 arquivo para obter através FileProvider. Aqui eu uso as ferramentas de uma abordagem Hongyang fornecido FitAndroid7