У меня есть несколько вопросов, ответ на которые поможет нам понять, что происходит не так.
Если вы не используете не используйте Map, вы должны сделать что-то подобное, так как PositionManager
не инициализирует MapEngine
сам по себе.
ApplicationContext context = new ApplicationContext(getApplicationContext());
MapEngine.getInstance().init(context, new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
if (error == OnEngineInitListener.Error.NONE) {
} else {
}
}
});
Обновление: на github есть еще одно тестовое приложение, которое может быть весьма полезным, без использования карты, но с использованием менеджера позиции. Надеюсь это поможет! https://github.com/heremaps/here-android-sdk-examples/tree/master/speed-limit-watcher
Вы можете использовать escape-коды VT100 . Большинство терминалов, включая xterm, поддерживают VT100. Для стирания строки это ^ [[2K
. В языке C это дает:
printf("%c[2K", 27);
под окнами 10 можно использовать стиль VT100 путем активации режима VT100 в текущей консоли для использования escape-последовательностей следующим образом:
#include <windows.h>
#include <iostream>
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
int main(){
// enabling VT100 style in current console
DWORD l_mode;
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleMode(hStdout,&l_mode)
SetConsoleMode( hStdout, l_mode |
ENABLE_VIRTUAL_TERMINAL_PROCESSING |
DISABLE_NEWLINE_AUTO_RETURN );
// create a waiting loop with changing text every seconds
while(true) {
// erase current line and go to line begining
std::cout << "\x1B[2K\r";
std::cout << "wait a second .";
Sleep(1);
std::cout << "\x1B[2K\r";
std::cout << "wait a second ..";
Sleep(1);
std::cout << "\x1B[2K\r";
std::cout << "wait a second ...";
Sleep(1);
std::cout << "\x1B[2K\r";
std::cout << "wait a second ....";
}
}
посмотрите следующую ссылку: окна VT100
Вы можете использовать \ r
( возврат каретки ), чтобы вернуть курсор в начало строки:
printf("hello");
printf("\rbye");
Это напечатает пока на той же линии. Однако он не удалит существующие символы, и поскольку пока короче, чем привет , вы получите пока . Чтобы стереть его, вы можете сделать новый отпечаток длиннее, чтобы перезаписать лишние символы:
printf("hello");
printf("\rbye ");
Или сначала сотрите его с несколькими пробелами, затем напечатайте новую строку:
printf("hello");
printf("\r ");
printf("\rbye");
Это напечатает hello , затем перейдите в начало строки и замените его пробелами, затем снова вернитесь в начало и выведите пока .
Обычно, когда у вас есть '\ r' в конце строки, печатается только возврат каретки без перевода строки. Если у вас есть следующее:
printf("fooooo\r");
printf("bar");
, вывод будет:
barooo
Я могу предложить одну вещь (возможно, обходной путь) - иметь строку фиксированного размера с завершением NULL, которая инициализируется всеми пробелами и заканчивается на '\ r '(каждый раз перед печатью), а затем используйте strcpy, чтобы скопировать в нее вашу строку (без новой строки), поэтому каждая последующая печать будет перезаписывать предыдущую строку. Примерно так:
char str[MAX_LENGTH];
// init str to all spaces, NULL terminated with character as '\r'
strcpy(str, my_string); // copy my_string into str
str[strlen(my_string)] = ' '; // erase null termination char
str[MAX_LENGTH - 1] = '\r';
printf(str);
Вы можете выполнить проверку ошибок, чтобы длина my_string
всегда была как минимум на единицу меньше, чем str
, но вы поняли основную идею.
Вы можете удалить строку, используя \ b
printf("hello");
int i;
for (i=0; i<80; i++)
{
printf("\b");
}
printf("bye");