2011-03-25 13 views
6

Quiero instalar un archivo apk de mi aplicación.cómo instalar el archivo apk programáticamente

He creado una aplicación que contiene un botón, al hacer clic en ese botón y luego otro apk que he almacenado en la carpeta de recursos debe ser instalar,
Heres algo que he hecho:

public void onClick(View v) { 
    // Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    // intent.setPackage("com.google.zxing.client.android"); 
    // intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
    // startActivityForResult(intent, 0); 
    File file = new File("android.resource://com.app.barcodescanner/raw", "scan.apk"); 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); 
    startActivity(intent); 
} 

cualquier ideas?
favor me ayude con este

Respuesta

14
Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File 
      (Environment.getExternalStorageDirectory() + "/barcode.apk")), "application/vnd.android.package-archive"); 
    startActivity(intent); 
+1

copie primero el archivo apk a la tarjeta sd mediante programación y luego realice el paso anterior – sUrAj

+1

¿Esto creará un mensaje para que el usuario lo acepte? Si es así, ¿hay alguna solución para evitarlo? –

+0

¿Puedo volver a abrirlo después de que la instalación se haya completado? – zionpi

2

Es probable que no va a funcionar con un android.resourceUri. Intente copiar el archivo APK en el almacenamiento externo y realice la instalación desde allí.

+0

Tengo una pregunta simple. Descargué mi apk de la red y voy a actualizar la apk descargada. Ahora me gustaría saber cómo sincronizaría ambos, significa que la barra de progreso debe mostrar tanto la actividad de descarga como la de carga juntas. Ayudame en este – AndroidOptimist

+0

@AndroidOptimist: Si "subir actividad" realmente significa "actividad de actualización", eso no es posible. Su proceso no se ejecutará cuando su aplicación se actualice. Además, su UI no estará visible antes de que comience la actualización, porque el * usuario * tiene que iniciar la actualización y el * usuario * tiene que aprobar la actualización. – CommonsWare

0
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    File DbFile=new File("mnt/sdcard/HelloAndroid.apk"); 
    if(!(DbFile.exists())) 
    { 
     try 
     { 
      int length = 0; 
      DbFile.createNewFile(); 
      InputStream inputStream = this.getAssets().open("HelloAndroid.apk"); 
      FileOutputStream fOutputStream = new FileOutputStream(DbFile); 
      byte[] buffer = new byte[inputStream.available()]; 
      while ((length = inputStream.read(buffer)) > 0) 
      { 
       fOutputStream.write(buffer, 0, length); 
      } 
      fOutputStream.flush(); 
      fOutputStream.close(); 
      inputStream.close(); 
     } 
     catch (Exception ex) 
     { 
      System.out.println("Error in creating new database at mobile..." + ex); 
      ex.printStackTrace(); 
     } 
    } 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File("/mnt/sdcard/HelloAndroid.apk")), "application/vnd.android.package-archive"); 
    startActivity(intent); 
} 

Aquí he guardado mi archivo apk en la carpeta de activos. Puedes probar esto.

+0

¿por qué no simplemente hacer 'intent.setDataAndType (Uri.fromFile (DbFile))," application/vnd.android.package-archive ")'? – Pierre

Cuestiones relacionadas