Domanda

Sto lavorando su un'applicazione Android per la mia azienda, che si collega a un dispositivo video bluetooth. Una società 3rd party che stiamo lavorando con costruito la macchina fotografica del bluetooth e hanno costruito un servizio (servizio di Android) che i nostri connette app a cui ci usano per interagire con la macchina fotografica. Questa società non ha voglia di avere accesso al codice sorgente così hanno creato uno SDK sotto forma di un servizio che deve essere installato sul telefono per l'interazione con la macchina fotografica di prendere posto. Se il servizio (che è solo un APK) non è installata la nostra applicazione non funzionerà.

Tuttavia, siamo in grado di rilevare che il servizio non esiste e quindi procedere per ottenere l'apk e ora stiamo cercando di capire il modo migliore per farlo. E 'possibile potremmo avere l'altra società pubblicare questo servizio nel mercato Android, anche se non ha alcuna interfaccia utente e, se installato sembrerebbe non fare nulla? Si può mettere qualcosa in Android Market e non averlo visibile in filtri normali (cioè l'unico modo per arrivare ad essa sarebbe andando direttamente alla pagina?). Non credo che vogliono che la gente di installarla in quanto la società 3rd party fa vendere lì proprio fotocamera (quasi lo stesso di quello che fare per noi) e hanno applicazioni nel mercato per esso.

L'altra possibilità è ospitiamo il file stessi e scaricateli quando l'utente installa l'applicazione prima .. Il problema di questo però è che dobbiamo capire la nostra propria metodologia per gli aggiornamenti.

Qualcuno ha esperienza con questo o avere tutte le idee che cosa potrebbe essere il modo migliore per gestire la nostra situazione?

È stato utile?

Soluzione 2

Ho finito per risolvere il problema combinando l'apk di servizio sotto la / cartella Assets della mia candidatura. È possibile leggere i dati come un InputStream e scrivere a sdcard dove è possibile lanciare l'intento di avere l'apk installato. L'utente deve fare è fare clic su Installa (a patto che essi hanno 3rd party applicazioni consentite, cui si intende dato che la nostra applicazione non è nel mercato sia.

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

Quindi, ciò che accade è quando l'applicazione primi lanci posso controllare se le esigenze di servizio da installare (o aggiornati) .. Che il codice è un po 'più complesso e al di fuori della portata di quello che sto facendo qui così non l'ho fatto pubblicalo. Ma se a determinare le esigenze di servizio per essere installato ho richiedere all'utente una finestra di dialogo e se fa clic su OK Ho poi chiamo il metodo installservice sopra indicato.

Altri suggerimenti

Se vi trovate in questa situazione io consiglierei che ospita l'apk dal server aziendale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top