Instale aplicaciones mediante programación en Android 10 | Autor: Vishwajeet Barve | Agosto de 2021
En la vida de un desarrollador de Android, no puede publicar una aplicación de Android en Play Store debido a los requisitos del cliente o de la organización. Por lo tanto, debe escribir su propia lógica, descargar una nueva versión de la aplicación y actualizarla programáticamente. Este era un proceso simple antes de Android Oreo, pero ahora que la situación ha cambiado, necesitamos hacer un trabajo adicional para escribir para seguir. Código de directrices de Android.
- Lo primero que debe hacer es otorgar permiso para almacenar e instalar paquetes (aplicaciones)
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. No puede acceder a storenvejecer directamente en Android 10, necesitamos definir proveedores de archivos (utilizados para obtener la ubicación de la aplicación) en la etiqueta de la aplicación en el archivo AndroidManifest
<provider
android:name="androidx.core.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>
3. Ahora necesitas crear provider_paths.xml si bien está definido en la etiqueta de proveedor del manifiesto, proporciona la ubicación de almacenamiento a la que desea acceder su aplicación
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="files_root"
path="Android/data/$applicationId" />
<external-path
name="external_files"
path="." />
</paths>
4. Debe escribir código para solicitar permisos de tiempo de ejecución para la instalación y el almacenamiento de paquetes.
//installtion permissionif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
//Storage Permission
if(!getPackageManager().canRequestPackageInstalls())
startActivityForResult(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)
.setData(Uri.parse(String.format("package:%s", getPackageName()))), 1);if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE, 1);if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE, 1);
5. El último paso es escribir una función para instalar la aplicación / apk, solo necesitas definir la ruta del archivo donde se almacena la apk.
void installAPK()String PATH = Environment.getExternalStorageDirectory() + "/" + "apkname.apk";
File file = new File(PATH);
if(file.exists())
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uriFromFile(getApplicationContext(), new File(PATH)), "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try
getApplicationContext().startActivity(intent);
catch (ActivityNotFoundException e)
e.printStackTrace();
Log.e("TAG", "Error in opening the file!");
else
Toast.makeText(getApplicationContext(),"installing",Toast.LENGTH_LONG).show();
Uri uriFromFile(Context context, File file)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
else
return Uri.fromFile(file);