Frage

Ich arbeite an einer Android -Anwendung für mein Unternehmen, das eine Verbindung zu einem Bluetooth -Videogerät herstellt. Ein Drittanbieterunternehmen, an dem wir mit der Bluetooth -Kamera zusammenarbeiten und einen Service (Android -Service) erstellt haben, den unsere App verbindet, mit der wir mit der Kamera interagieren. Dieses Unternehmen wollte nicht, dass wir Zugriff auf den Quellcode haben, sodass sie einen SDK in Form eines Dienstes erstellt haben, der für die Interaktion mit der Kamera auf dem Telefon installiert werden muss. Wenn der Dienst (der nur eine APK ist) nicht installiert ist, funktioniert unsere App nicht.

Wir können jedoch feststellen, dass der Dienst nicht existiert, und dann versuchen wir, die APK zu erhalten, und jetzt versuchen wir herauszufinden, wie es am besten ist, dies zu tun. Ist es möglich, dass das andere Unternehmen diesen Service auf dem Android -Markt veröffentlichen, obwohl es keine Benutzeroberfläche hat und wenn sie installiert wird, scheint nichts zu tun? Können Sie etwas in den Android -Markt einfügen und es nicht unter normalen Filtern auftauchen lassen (was bedeutet, dass der einzige Weg, dies zu erreichen, direkt zur Seite gehen würde?). Ich glaube nicht, dass sie die Leute installieren wollen, da das Unternehmen der Drittanbieter dort eine eigene Kamera verkauft (fast die gleiche wie die für uns, die sie für uns machen) und sie Bewerbungen auf dem Markt dafür haben.

Die andere Möglichkeit besteht darin, dass wir die Datei selbst hosten und sie herunterladen, wenn der Benutzer die App zum ersten Mal installiert. Das Problem ist jedoch, dass wir unsere eigene Methodik für Upgrades herausfinden müssen.

Hat jemand Erfahrung damit oder Ideen, was könnte der beste Weg sein, um mit unserer Situation umzugehen?

War es hilfreich?

Lösung 2

Am Ende habe ich das Problem gelöst, indem ich den Service APK unter dem Ordner /assets -Ordner meiner Anwendung bündelte. Sie können diese Daten als InputStream lesen und an SDCard schreiben, wo Sie dann die Absicht starten können, die APK installieren zu lassen. Der Benutzer muss nur auf Installation klicken (solange sie Apps von Drittanbietern erlaubt haben, was sie auch auf dem Markt sind, da unsere App auch nicht auf dem Markt ist.

public static final String SERVICE_APK_FILENAME = "SomeService.apk";

protected void installService() {

    File apk = getServiceFileOnDisk();
    if (!apk.exists()) {
        try {
            writeServiceToFile();
        } catch (Exception ex) {
            Log.e(TAG, "", ex);                
            return;
        }
    }

    Intent promptInstall = new Intent(Intent.ACTION_VIEW);
    promptInstall.setDataAndType(Uri.fromFile(getServiceFileOnDisk()),
            "application/vnd.android.package-archive");
    startActivityForResult(promptInstall, REQUEST_INSTALL_APK);
}

protected File getServiceFileOnDisk() {
    return new File(Util.getAppStorageDirectory(this), SERVICE_APK_FILENAME);
}

protected void writeServiceToFile() throws IOException {
    File apk = getServiceFileOnDisk();
    InputStream assetIs = mAssetMgr.open(SERVICE_APK_FILENAME);
    OutputStream out = new FileOutputStream(apk);
    // Transfer bytes from in to out
    byte[] buf = new byte[4 * 1024];
    int len;
    while ((len = assetIs.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    assetIs.close();
    out.close();       
}

Wenn die App zum ersten Mal startet, überprüfe ich, ob der Dienst installiert (oder aktualisiert) werden muss. Dieser Code ist etwas komplexer und außerhalb des Rahmens dessen, was ich hier mache, damit ich ihn nicht gepostet habe. Wenn ich jedoch feststelle, dass der Dienst installiert werden muss, fordere ich den Benutzer mit einem Dialogfeld auf. Wenn er auf OK klickt, rufe ich die oben gezeigte InstallationService -Methode auf.

Andere Tipps

Wenn Sie sich in dieser Situation befinden, würde ich empfehlen, die APK von Ihrem Firmenserver von Ihrem Firmenserver zu hosten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top