Публикация зависимости на рынке Android - PullRequest
1 голос
/ 16 февраля 2012

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Я решил проблему, связав apk службы в папке / assets моего приложения.Вы можете прочитать эти данные как входной поток и записать их в SDCard, где вы можете запустить намерение установить 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, показанный выше.

0 голосов
/ 16 февраля 2012

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

...