Вопрос

Я работаю над приложением для Android для моей компании, которое подключается к видеоустройству Bluetooth.Сторонняя компания, с которой мы работаем, создала камеру Bluetooth и сервис (Android service), к которому подключается наше приложение и который мы используем для взаимодействия с камерой.Эта компания не хотела, чтобы у нас был доступ к исходному коду, поэтому они создали SDK в виде сервиса, который должен быть установлен на телефоне для взаимодействия с камерой.Если сервис (который представляет собой всего лишь APK-файл) не установлен, наше приложение не будет работать.

Однако мы можем обнаружить, что сервис не существует, а затем перейти к получению apk-файла, и теперь мы пытаемся найти наилучший способ сделать это.Возможно ли, чтобы мы попросили другую компанию опубликовать этот сервис в Android Market, даже если у него нет пользовательского интерфейса и при установке он, по-видимому, ничего не делает?Можете ли вы поместить что-то в Android Market и не показывать это под обычными фильтрами (это означает, что единственный способ добраться до этого - перейти непосредственно на страницу?).Я не думаю, что они хотят, чтобы люди устанавливали его, поскольку сторонняя компания продает свою собственную камеру (почти такую же, как та, которую они делают для нас), и у них есть приложения для нее на рынке.

Другая возможность заключается в том, что мы сами размещаем файл и загружаем его, когда пользователь впервые устанавливает приложение..Однако проблема в том, что мы должны разработать нашу собственную методологию обновления.

Есть ли у кого-нибудь опыт работы с этим или есть какие-либо идеи, как лучше всего справиться с нашей ситуацией?

Это было полезно?

Решение 2

В итоге я решил проблему, установив apk-файл службы в папку / assets моего приложения.Вы можете прочитать эти данные в виде входного потока и записать их на SD-карту, где затем сможете запустить намерение установить apk.Все, что нужно сделать пользователю, это нажать кнопку Установить (при условии, что у них разрешены сторонние приложения, что они и сделают, поскольку нашего приложения также нет на рынке.

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

Итак, что происходит, когда приложение впервые запускается, я проверяю, нужно ли устанавливать (или обновлять) сервис..Этот код немного сложнее и выходит за рамки того, что я здесь делаю, поэтому я его не публиковал.Но если я определяю, что сервис необходимо установить, я запрашиваю у пользователя диалоговое окно, и если он нажимает "Ок", я затем вызываю метод installService, показанный выше.

Другие советы

Если вы оказались в такой ситуации, я бы рекомендовал разместить apk-файл на сервере вашей компании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top