studio para moviles instalacion desarrollo crear con aplicaciones android android-intent broadcast intentfilter

para - instalacion de android studio pdf



Android: BroadcastReceiver en la instalación/desinstalación de la aplicación (1)

Quiero instalar un archivo apk y configurar un receptor de radio para obtener información sobre el estado de la instalación.

He preparado una clase BroadcastReceiver:

public class newPackageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("DEBUG"," test for application install/uninstall"); } }

En la actividad principal, primero registro un nuevo objeto receptor y luego el botón instanciar para la instalación de la aplicación.

public void onCreate(Bundle savedInstanceState) { ... IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED); filter.addAction(Intent.ACTION_PACKAGE_INSTALL); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addAction(Intent.ACTION_PACKAGE_REPLACED); filter.addAction(Intent.ACTION_PACKAGE_RESTARTED); receiver = new newPackageReceiver(); registerReceiver(receiver, filter); ... dlButton.setText(R.string.dl_button); dlButton.setOnClickListener(new AppliDownloadOnClickListener(this )); @Override public void onDestroy(){ unregisterReceiver(receiver); super.onDestroy(); }

En mi clase OnclickListener, puse:

@Override public void onClick(View v) { // actually, the below process is in an asyncTask URL url; Intent promptInstall; try { url = new URL(apkurl); HttpURLConnection c = (HttpURLConnection) url.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); String PATH = Environment.getExternalStorageDirectory()+ "/download/"; File file = new File(PATH); file.mkdirs(); File outputFile = new File(file, "app.apk"); FileOutputStream fos = new FileOutputStream(outputFile); InputStream is = c.getInputStream(); byte[] buffer = new byte[1024]; int len1 = 0; while ((len1 = is.read(buffer)) != -1) { fos.write(buffer, 0, len1); } fos.close(); is.close(); promptInstall = new Intent(Intent.ACTION_VIEW); promptInstall.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")), "application/vnd.android.package-archive"); if (promptInstall != null) { activity.startActivity(promptInstall); } else { ErrorDetails.displayToastMessage(activity,R.string.connection_error); } } catch (...) { ... } }

Con el código anterior (lo he encogido), cuando se hace clic en el botón, se muestra el instalador y la aplicación está perfectamente instalada, pero nunca se llama a la clase de receptor (newPackageReceiver). El registro (registerReceiver) se realiza en el método onCreate y se llama a unregisterReceiver en el método onDestroy, por lo que debe ser válido. Sabes por qué ?

Gracias por leer !