Как сделать приложение для Android, которое зависит от другого приложения? - PullRequest
19 голосов
/ 11 октября 2011

Если я создаю приложение, которое зависит от другого приложения или приложений (например, приложений Facebook и Twitter), но они не установлены, есть ли способ проверить эти зависимости и установить их одновременно с моимприложение?

Ответы [ 5 ]

21 голосов
/ 25 октября 2011

Я сделал это в своем приложении, которое требует установки приложения сканера zxing.Вам понадобится это в вашем onclick или ontouch:

try{
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.setPackage("com.google.zxing.client.android");
    startActivityForResult(intent, 0);
} catch (Exception e) {
    createAlert("Barcode Scanner not installed!", "This application uses " +
    "the open source barcode scanner by ZXing Team, you need to install " +
    "this before you can use this software!", true);
}

, который вызывает

public void createAlert(String title, String message, Boolean button) {
    // http://androidideasblog.blogspot.com/2010/02/how-to-add-messagebox-in-android.html
    AlertDialog alertDialog;
    alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle(title);
    alertDialog.setMessage(message);
    if ((button == true)) {
        alertDialog.setButton("Download Now",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                Intent browserIntent = new Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("market://search?q=pname:com.google.zxing.client.android"));
                startActivity(browserIntent);
            }
        });
    }
    alertDialog.show();
}

Затем, после сортировки всего этого кода, я понимаю, что вы попросили установить его на1007 * в то же время, что и ваше приложение .Не уверен, если я должен опубликовать этот код, но это может быть полезно

9 голосов
/ 26 октября 2011

Краткий ответ: Нет, вы не можете автоматически устанавливать другие приложения как зависимости.

Более длинный ответ:

Android Market не позволяет объявлять другие приложения для установки в качестве зависимости. Как система, Маркет, как представляется, предназначен для установки одного приложения, а не для таблиц мега-зависимостей в стиле дистрибутива Linux.

В время выполнения , вы можете проверить наличие установленных приложений и, если это так, отправить пользователя на Маркет. Посмотрите методы, предложенные @QuickNick (тестирование, если приложение установлено) и @TerryProbert (вывод на рынок), если вы этого хотите.

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

5 голосов
/ 11 октября 2011

Начните с этого:

Intent mediaIntent = new Intent("com.example.intent.action.NAME");
// add needed categories
List<ResolveInfo> listResolveInfo = getPackageManager().queryIntentServices(mediaIntent, 0);
if (listResolveInfo.size() != 0) {
  //normal behavior
} else {
  //install what you need
}

Я приведу пример запроса услуг.Если вы хотите проверить действия, то вы будете вызывать queryIntentActivities ().

4 голосов
/ 28 октября 2011

Я думаю, что следование шаблону, описанному в этом посте в блоге разработчиков Android, поможет вам. http://android -developers.blogspot.com / 2009/01 / может-я потребительной это-intent.html Как указывает TerryProbert, если вы знаете, что Намерение недоступно, предложите пользователю установить отсутствующее приложение.

2 голосов
/ 30 октября 2011

Вот что я использую, чтобы вернуть первое существующее задание:

                try {
                Class<?> missionClass = Class.forName(mPackageName+".Mission"+mission);
                        Method missionDescription;
                        missionDescription = missionClass.getMethod("missionDescription");
                        mMissionDescription = (String) missionDescription.invoke(null);
                        if (mMissionDescription.length() > 0) {
                            nextMission = mission;
                            break;
                        }
                    } catch (Exception e) {
                        //DEBUG*/Log.v(this.getClass().getName(), "onResume: Mission no "+mission+" not found: "+e.getMessage());
                    }

Каждая миссия проводится в отдельном классе, полученном из базового класса Миссии. Производные классы называются Mission1, Mission24 и т. Д.

Не все миссии определены.

Базовый класс имеет абстрактный класс missionDescription, который возвращает строку, описывающую миссию.

Этот код находится внутри цикла, поэтому тестирует mission = от 1 до 99, пытаясь вызвать missionDescription. Возвращается, когда возвращается описание первой найденной миссии.

...