Можно ли указать манифесту требовать API Google Maps, только если он доступен на устройстве?
Да.Включите android:required="false"
в элемент <uses-library>
, где вы запрашиваете Карты Google.Затем вы можете использовать отражение, чтобы увидеть, скажем, MapActivity
существует в вашей виртуальной машине Dalvik. Если это так, вы находитесь на устройстве с поддержкой Maps и можете безопасно запустить карту.Если он не существует, вам необходимо отключить функции сопоставления.
Вот пример приложения , демонстрирующий это, с действием MapDetector
LAUNCHER
, которое видит, если MapActivity
существует и затем либо перенаправляет управление на фактическую реализацию MapActivity
, либо вызывает Toast
, если приложение запускается на устройстве, не являющемся Google Maps.
Вот реализация действия MapDetector
из этого проекта:
public class MapDetector extends Activity {
@Override
public void onCreate(Bundle instanceState) {
super.onCreate(instanceState);
try {
Class.forName("com.google.android.maps.MapActivity");
startActivity(new Intent(this, NooYawk.class));
}
catch (Exception e) {
Toast
.makeText(this,
"Google Maps are not available -- sorry!",
Toast.LENGTH_LONG)
.show();
}
finish();
}
}