Если я создаю приложение, которое зависит от другого приложения или приложений (например, приложений Facebook и Twitter), но они не установлены, существует ли способ проверки этих зависимостей и установки их одновременно с моими собственными приложение?
Как сделать приложение для Android, которое зависит от другого приложения?
Ответ 1
Я сделал это в своем приложении, которое требует установки приложения zxing scanner. Вы захотите этого внутри вашего 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();
}
Затем, разобрав весь этот код, я понял, что вы попросили его установить одновременно с вашим приложением. Не уверен, что я должен опубликовать этот код, но может быть полезно
Ответ 2
Короткий ответ: Нет, вы не можете автоматически устанавливать другие приложения в качестве зависимостей.
Более длинный ответ:
Android Market не позволяет вам объявлять другие приложения для установки в качестве зависимости. Как система, рынок, по-видимому, предназначен для одиночных приложений, а не для графических зависимостей в стиле Linux.
Во время выполнения вы можете протестировать установленные приложения и вывести своего пользователя на рынок, если это так. См. Методы, предложенные @QuickNick (тестирование, если приложение установлено), и @TerryProbert (показывая на рынок), если это то, что вы хотите.
Ваш лучший выбор - это, вероятно, дизайн вашего приложения, чтобы грациозно деградировать, если зависимости недоступны, и предложить (или настаивать), чтобы они отправились на рынок, чтобы установить их.
Ответ 3
Начните с этого:
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
Я думаю, что после того, как шаблон, описанный в этом посте в блоге разработчиков Android, поможет вам. http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html Как указывает ТерриПроберт, если вы знаете, что намерение недоступно, попросите пользователя установить отсутствующее приложение.
Ответ 5
Здесь я использую, чтобы вернуть первую активность миссии, которая существует:
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, который возвращает строку, описывающую миссию.
Этот код находится внутри цикла, поэтому test mission = 1 - 99, пытаясь вызвать missionDescription. Он возвращается, когда возвращается описание для первой найденной миссии.