Подтвердить что ты не робот

Как устанавливать приложения программно, не открывая Play Store (как это делает Google Диск)

Сегодня приложение Google Диска спросило, хочу ли я устанавливать новые приложения "Таблицы и документы".

Я согласился, ожидая, что он откроет Google Play Store, чтобы я мог нажать на установку.

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

Я не знал, что это можно сделать.

Как мы можем воспроизвести это поведение в приложении: есть кнопка "Установить приложение XPTO", которой не нужно открывать Google Play Store? Просто показывает диалог с разрешениями и переходит к его установке через Play Маркет?


UPDATE:

Для тех, кто стремится, потому что они думают, что это то же самое, что и другие вопросы... Это не так!

В этом случае APK не загружается приложением Google Диска, а затем устанавливается. Google Диск "сообщает" Play Store для загрузки и установки.

Что API, который мне интересен.

Чтобы поддержать мой случай: после нажатия ВНУТРИ Google Диска, чтобы установить приложения, не открывая Play Store, загрузка начинается. Во время загрузки я открыл Play Store для проверки и:

enter image description here

Скриншот доказывает, что Google Диск не загружает APK и не устанавливает его. Это Play Store.

4b9b3361

Ответ 1

Журналы для Google Диска показывают, что активность, ответственная за "указание" Google Play Store для установки приложений,

com.google.android.apps.docs/com.google.android.apps.docs.app.PhoneskyApplicationInstallerActivity

который, по-видимому, "говорит"

com.android.vending/com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity

для установки необходимых пакетов.

Итак, теоретически, можно создать намерение

Intent intent = new Intent("com.android.vending.billing.PURCHASE");
intent.setClassName("com.android.vending",
        "com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity");
intent.putExtra(EXTRA_NAME, EXTRA_VALUE);
startActivityForResult(intent, 0);

с правильными дополнительными значениями и voilà!

Однако вызов LightPurchaseFlowActivity из не подписанного Google приложения не выполняется, потому что они снова, по-видимому (в соответствии с журналами), проверяют подпись вызываемого пакета:

W/Finsky(13209): [1] LightPurchaseFlowActivity.setupFromExternalPurchaseIntent: Called from untrusted package.

Итак, в этот момент этого не может быть достигнуто.

Ответ 2

Google+ теперь реализует кнопки, в которых вы можете напрямую загрузить приложение (см. эту ссылку), не нажимая кнопку на сайте магазина воспроизведения.

Ссылка выглядит следующим образом: https://play.google.com/store/apps/details?id=com.example.app&rdid=com.example.app&rdot=1&feature=md

Если вы добавите параметр rdid, rdot и функции, он будет работать на моем телефоне (если я напечатаю его в браузере, не проверял с намерением и не тестировал обновите приложение, установив его только).

Edit

Я узнал, что вам нужно только добавить rdid -параметр в URL. Источник: http://www.androidb.com/2014/04/increase-app-installs-with-a-single-trick/

Edit2:

Не работает с намерением.: (

Ответ 3

Я бы сказал, что на Google Диске есть системные разрешения, как в Play Маркете. Возможно, потому что он подписан с подписью Google.

Если вам удастся получить разрешение "android.permission.INSTALL_PACKAGES", вы можете вызвать API (который не включен в android.jar, развернутый диспетчером SDK, вам нужно получить скрытые API-интерфейсы от android.jar в например, эмулятор) для установки приложений.

Таким образом, если у вас нет системных разрешений (путем добавления APK в /system/app, подписанного с сертификатом OEM или с помощью root), вы не сможете это сделать.

Источник: уже запрограммированы некоторые системные приложения

--- UPDATE

Конечно, в игровом магазине может быть какая-то дверь, которую вы можете использовать для установки любого приложения, но для этого, вероятно, требуются разрешения, которые вы не можете получить самостоятельно

Ответ 4

Если вы знаете, где у вас есть файл apk, вы можете легко.

File file = new File(dir, "YourApp.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);