1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

.apk direkt von einer Website aus installieren

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von RED-BARON, 19.11.2010.

  1. RED-BARON, 19.11.2010 #1
    RED-BARON

    RED-BARON Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    Hallo Ihrs :cool2:

    habe nur folgendes gefunden im Forum

    http://www.android-hilfe.de/htc-her...m-einer-website-aus-installieren-geloest.html

    was aber nicht ganz das ist was ich will.

    Meine App soll eine OnlineUpdate selber laden und sich selbst aktualisieren.

    Ich denk, man benötigt eine zweite App, welche das Update vom eigenen
    Server läd und die bestehende App aktualisiert. Nur wie müsste diese
    gestrickt sein ?

    Oder einfach gefragt, wie installiert man programmatisch eine App :confused2:
    und welche Voraussetzungen muss die "Update.apk" mitbringen, ausser
    Netzwerkzugriff ?

    Hab davon NULL Ahnung, bin für jeden Hinweis dankbar. Schönes WE. RB
     
  2. ramdroid, 19.11.2010 #2
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    automatisches updaten funktioniert nicht, höchstens du nutzt den kürzlich aufgekommenen exploit für silent installs aus, was aber eher eine schlechte idee ist.

    Generell muss der user beim installieren einer app die benötigten Berechtigungen bestätigen. Da führt kein Weg daran vorbei.

    Aber warum auch selbst updaten? Macht doch Android schon je nach Version mehr oder weniger automatisch....
     
  3. RED-BARON, 19.11.2010 #3
    RED-BARON

    RED-BARON Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    Hallo , danke für die Antwort,


    >Aber warum auch selbst updaten? Macht doch Android schon je nach
    >Version mehr oder weniger automatisch....

    Weil es eine eigene App ist deren Updates euf einem eignen Webserver
    liegen - ausser reichweite eines Markets oder sonstiger bestehender
    Strukturen. Von dem Exploid wusste ich nix und will sowas auch nicht
    nutzen. Es würde mir schon reichen wenn ich wüsste, wie ich eine
    APK "ausführen" kann damit der Installer hoch kommt und den User ab-
    fragt ob die Anwendung überschrieben werden soll- so wie es iat wenn
    ich die Apk vom Server per Browser lade und dann im Downloadverlauf
    antippe und der Installer springt an.

    So den, nun mal gelassen ins WE schlendern ;D
     
  4. Fr4gg0r, 19.11.2010 #4
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    20s google und du wüsstest es :w00t00:

    Einfach den richtigen Intent mit nem Extra zu der .apk losschicken.
    Ob du so auch die .apk updaten kannst, weiß ich nicht.
     
  5. ktt, 21.11.2010 #5
    ktt

    ktt Android-Hilfe.de Mitglied

    Beiträge:
    45
    Erhaltene Danke:
    2
    Registriert seit:
    27.02.2009
    Ich will jetzt nix falsches sagen.

    Aber ich kann mir vorstellen das es Android noch bringen wird das man per Remote Administrativ Apps updaten kann die nicht im Market sind.
    Sozusagen das man das Handy einmal konfiguriert und es dann wie eine Art Firmen Market hat wo die Apps nach Upload aktualisiert werden.

    Ansonsten scheint das Automatische Installieren von APK nicht möglich zu sein ohne das Handy zu Rooten denn alle Markets nebem dem orginal haben es nicht hin bekommen das die APK direkt aus der Market App installiert werden sondern nur durch Bestätigung über den Android Installer.

    Gruß Kevin
     
  6. RED-BARON, 22.11.2010 #6
    RED-BARON

    RED-BARON Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    Code:
    [SIZE=2]URL sourceUrl = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] URL([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff][URL]http://anwendung.to/android/anwendung.apk[/URL][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [LEFT][SIZE=2]Object data = sourceUrl.getContent();[/SIZE][/LEFT]
    [SIZE=2]String fileName = sourceUrl.getFile(); [/SIZE]
    [LEFT][SIZE=2]fileName = fileName.substring(fileName.lastIndexOf([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]'/'[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) + 1);[/SIZE]
    [SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]// create/open file in the 'data/data/<app [U]namespace[/U]>/files' directory[/COLOR][/SIZE][/COLOR][/SIZE][/LEFT]
     
    [LEFT][SIZE=2]FileOutputStream fos = openFileOutput(fileName, Context.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]MODE_PRIVATE[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2] | Context.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]MODE_WORLD_READABLE[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]);[/SIZE][/LEFT]
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] read = 0;[/SIZE][/LEFT]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]byte[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][] buffer = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]byte[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][512];[/SIZE]
    [SIZE=2]BufferedInputStream bis = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] BufferedInputStream((InputStream)data);[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]do[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]{[/SIZE]
    [SIZE=2]  read = bis.read(buffer);[/SIZE]
        [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](read > 0){[/SIZE][SIZE=2]fos.write(buffer, 0, read);[/SIZE][SIZE=2]}[/SIZE]
     
    [SIZE=2]}[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]while[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](read != -1);[/SIZE]
     
    [SIZE=2]Intent intent = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] Intent();[/SIZE]
    [SIZE=2]intent.setAction(android.content.Intent.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]ACTION_VIEW[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]); [/SIZE]
    [SIZE=2]intent.setDataAndType(Uri.[I]parse[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"/data/data/anwendung.test/files/anwendung.apk"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]), [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"application/vnd.android.package-archive"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [LEFT][SIZE=2]startActivity(intent);[/SIZE][/LEFT]
    
    soweit hab ich mir den Code zusammengesucht, bekomme aber immer
    noch diesen Fehler beim Aufruf: startActivity(intent);

    ActivityNotFoundException: No Activity found to handle Intent

    Der gleiche Fehler tritt auf wenn diese Variante verwendet wird

    Intent intent = new Intent(Intent.ACTION_PACKAGE_INSTALL, Uri.parse("/data/data/anwendung.test/files/anwendung.apk"));
    startActivity(intent);

    :(
     
  7. Fr4gg0r, 22.11.2010 #7
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    auf dem Emulator?
    Vll. hat der nicht die System app, welche die Rechte besitzt, Anwendungen hinzuzufügen..
     
  8. RED-BARON, 24.11.2010 #8
    RED-BARON

    RED-BARON Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    danke, Fr4gg0r.

    Nein nicht nur auf dem Emulator - ich teste die App immer
    auf Emulator UND HTC-Magic mit Android 1.5, auf beiden
    zeigt sich identisches Verhalten. Ich muss wohl weitersuchen :huh:


    nach etwas stöbern in den Dokus arbeitet obiger Code mit folgender
    Änderung nun wie gewünscht !

    fileName = "/data/data/anwendung.test/files/anwendung.apk";
    intent.setDataAndType(Uri.parse("file://" + fileName), "application/vnd.android.package-archive");

    Dabei aktualisiert sich die App selbst, es ist keine extra UpdateApp
    notwendig !


    Nochmal Danke, besonders für diesen Hinweis:
    "Einfach den richtigen Intent mit nem Extra zu der .apk losschicken." :)
     
    Zuletzt bearbeitet: 24.11.2010

Diese Seite empfehlen