2011-03-25 5 views
6

Je veux installer un fichier apk de mon application.comment installer le fichier apk par programme

J'ai créé une application qui contient un bouton, lorsque je clique sur ce bouton puis un autre apk que j'ai stocké dans le dossier des ressources doit être installer,
Heres quelque chose que je l'ai fait:

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); 
} 

tout des idées?
s'il vous plaît me aider

Répondre

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

première copie fichier apk à la carte SD par programme, puis faire l'étape ci-dessus – sUrAj

+1

Est-ce que cela va créer une invite pour l'utilisateur à accepter? Si oui existe une solution de contournement pour l'éviter? –

+0

Puis-je le rouvrir une fois l'installation terminée? – zionpi

2

Il ne fonctionnera probablement pas avec un android.resourceUri. Essayez de copier l'APK sur le stockage externe et de faire l'installation à partir de là.

+0

J'ai une question simple. J'ai téléchargé mon apk à partir du net et je vais mettre à jour l'apk téléchargé. Maintenant, je voudrais savoir comment je synchroniser les deux, signifie que la barre de progression doit afficher à la fois l'activité de téléchargement et de téléchargement ensemble. Aidez-moi dans ce – AndroidOptimist

+0

@AndroidOptimist: Si "upload activity" signifie vraiment "update activity", ce n'est pas possible. Votre processus ne sera pas exécuté lorsque votre application sera mise à jour. De plus, votre interface utilisateur ne sera pas visible avant le début de la mise à jour, car le * utilisateur * doit démarrer la mise à jour et le * utilisateur * doit approuver la mise à jour. – 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); 
} 

Ici, j'ai stocké mon fichier APK dans le dossier actif. Tu peux essayer ça.

+0

pourquoi ne pas faire 'intent.setDataAndType (Uri.fromFile (DbFile))," application/vnd.android.package-archive ")'? – Pierre

Questions connexes