Как я могу интегрировать приложение навигатор на устройстве
Как лучше всего использовать такие функции навигации, как планирование маршрута, когда у меня есть адрес в Movelet, и я хочу запустить навигацию через внешнее приложение на iOS, Android и Windwos Phone?
3 ответа
Чтобы перейти в другое приложение, вам нужна функция Movilizer AppJump, с помощью которой вы можете открыть соединение (Module SPI) и запустить выполнение с использованием команды exec. Вам или пользователю все еще нужно сделать, чтобы запустить навигацию вручную, нажав кнопку "Пуск" в приложении карт.
Для Android-клиента вам нужно использовать протокол с именем geo. Geo дает вам две возможности, вы можете либо ввести конкретные координаты, либо ввести адрес.
Использование определенных координат будет выглядеть так:
'geo:49.483611111111,8.463055555555697?z=18'
Если вы не знаете координаты, вы также можете использовать:
'geo:0,0?q=Wilhelm-Varnholt-Allee 1, 68165 Mannheim?z=18'
В вашем коде это будет выглядеть так:
if(platform == 11)
{
intentURL = conCat('geo:0,0?q=', destPoint,'?z=18');
conStr = conCat('exec:', intentURL);
}
Для клиента iOS схема URL выглядит очень похоже, но вместо использования geo вам нужно использовать указатель на приложение, которое вы хотите открыть.
'exec:maps://?q=Wilhelm-Varnholt-Allee 1, 68165 Mannheim?z=18'
Использование maps:// откроет приложение Apple Maps, если вы хотите иметь Google Maps, вы должны использовать comgooglemaps://
Я подготовил небольшой пример, который может помочь вам решить вашу проблему:
<question key="#1" type="6" title="Address">
<answer key="#1_0" nextQuestionKey="END" dummyAnswer="true"/>
<onEnterAssignment>
addresses =
{
'Diakoniekrankenhaus Mannheim' : 'Speyerer Str. 91, 68163 Mannheim';
'Moll-Gymnasium' : 'Feldbergstraße 16, 68163 Mannheim';
'Planetarium Mannheim' : 'Wilhelm-Varnholt-Allee 1, 68165 Mannheim';
'Karl Benz Stadion' : 'Theodor-Heuss-Anlage 20, 68165 Mannheim';
'Luisenpark' : 'Theodor-Heuss-Anlage 2, 68165 Mannheim';
'Mannheim City Airport':'Seckenheimer Landstr.172, 68163 Mannheim';
};
for(dest:addresses)
{
addAnswer($answer:'#1_0', dest, dest);
}
platform = getClientType();
</onEnterAssignment>
<onLeaveOkPersistAssignment>
destPoint = addresses[getQuestionValue()];
if(platform == 11)
{
intentURL = conCat('geo:0,0?q=', destPoint,'?z=18');
conStr = conCat('exec:', intentURL);
}
else
{
conStr = conCat('exec:maps://?q=', destPoint, '?z=18');
}
conID = connect(conStr, null);
if(isConnectionOpen(conID))
{
close(conID);
}
</onLeaveOkPersistAssignment>
Для навигации по Android у меня сработало следующее.
intentURL = '%com.google.android.apps.maps%google.navigation:q=Address';
conID = connect(concat('exec:', intentURL), "name");
if (conID ?ge 0)
{
close(conID);
}
Address could be: RMZ Eco World Rd, Adarsh Palm Retreat Villas, Bellandur, Bengaluru, Karnataka 560103, India
Я также нашел другой способ на Android:
addressTxt = "Wenceslas Square, Prague, CZ";
connStr = concat("exec://", "%com.google.android.apps.maps%", "http://maps.google.com/maps?daddr=", addressTxt);
connection = connect(connStr, "name");
try
{
close(connection);
}
catch (exception)
{
}