2015-03-13 2 views
0

У меня возник вопрос, что я вижу несколько ответов для переполнения стека, но безрезультатно. Что я пытаюсь сделать, так это:Установка APK с рынка с быстрой установкой из приложения

Я делаю приложение, которое проверяет, установлено ли приложение первым. Например, com.appA.android.

Если приложение AppA не установлено, оно запрашивает у пользователя оперативную установку для установки приложения перед продолжением. Я не пытаюсь установить APK без разрешения пользователя, но с их разрешения. appA находится в магазине, но я не хочу, чтобы мои пользователи были отстранены от приложения. В настоящее время мой способ сделать это выглядит так:

Intent promptInstall = new Intent(Intent.ACTION_VIEW) 
         .setDataAndType(Uri.parse("file:///path/to/apk"), 
       "application/vnd.android.package-archive"); 
       startActivity(promptInstall); 

любым способом я могу сделать это с помощью рыночных связей?

Спасибо за помощь!

+0

Нет, вы не можете загрузить APK из игры Храните сами, вы должны пройти через пользовательский интерфейс магазина, либо приложение на устройстве, либо веб-интерфейс. –

ответ

0

Попробуйте что-нибудь подобное, чтобы открыть страницу сведений о Google Play для определенного приложения. (Предположив это то, что вы хотите сделать)

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse("market://details?id=com.example.android")); 
startActivity(intent); 
+0

Спасибо за ваш ответ. Тем не менее, я пытаюсь сохранить своих пользователей внутри приложения и приветствую приглашение диспетчера пакетов «установить/продать/отменить», а не отрываться. – DirectXgameR

+0

AFAIK, вы не можете установить приложение прямо с рынка в фоновом режиме, не показывая пользовательский интерфейс рынка. Вы можете попытаться программно загрузить APK с рынка и установить это в фоновом режиме. – JonasCz

+0

Я был бы в порядке, сначала загрузив файл в хранилище, чем запрос на установку. Каков наилучший способ сделать это? Благодаря! – DirectXgameR

1

По соображениям безопасности вы не можете установить APK без установки Диалог или в фоновом режиме. Вы можете установить APK в фоновом режиме с помощью root и Packagemanager.

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

<receiver android:name=".PackageReceiver"> 
<intent-filter> 
    <action android:name="android.intent.action.PACKAGE_ADDED" /> 
    <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="package" /> 
</intent-filter> 

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

public class PackageReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
// handle install event here 
} 
} 

Вторая попытка имея таймер, который пытаются найти приложение все nSeconds для установки. Пример из другой вопрос:

public class Example extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //Put the package name here... 
     boolean installed = appInstalledOrNot("com.Ch.Example.pack"); 
     if(installed) { 
      //This intent will help you to launch if the package is already installed 
      Intent LaunchIntent = getPackageManager() 
       .getLaunchIntentForPackage("com.Ch.Example.pack"); 
      startActivity(LaunchIntent); 

      System.out.println("App already installed on your phone");   
     } 
     else { 
      System.out.println("App is not installed on your phone"); 
     } 
    } 

    private boolean appInstalledOrNot(String uri) { 
     PackageManager pm = getPackageManager(); 
     boolean app_installed = false; 
     try { 
      pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); 
      app_installed = true; 
     } 
     catch (PackageManager.NameNotFoundException e) { 
      app_installed = false; 
     } 
     return app_installed ; 
    } 
} 

И последнее, но не менее важное: Если у вас есть APK и корень, вы можете установить его с помощью команды оболочки:

pm install APKFile.apk 
+0

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

+0

Несомненно, это так.Потому что это позволит пользователю оставаться в текущей деятельности, так как текущая активность может прослушивать установку и возобновлять ее. –

+0

Нет, это не так, потому что вы упускаете из виду тот факт, что ** вы не можете получить файл apk из магазина воспроизведения, чтобы сделать это с помощью **. Это, а не метод того, что делать, если можно, является ядром вопроса. –

Смежные вопросы