У меня есть к pthread_join каждый поток, который я создаю?

Хотя текущие ответы великолепны, ни один из них не сделал то, что я искал, я хотел открыть только приложение карт, добавить имя для каждого исходного местоположения и пункта назначения, используя схему гео-URI. работать на меня вообще, и у веб-ссылки на карты не было ярлыков, поэтому я придумала это решение, которое, по сути, объединяет другие решения и комментарии, сделанные здесь, надеюсь, это будет полезно для других, просматривающих этот вопрос.

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);

Чтобы использовать ваше текущее местоположение в качестве отправной точки (к сожалению, я не нашел способа обозначить текущее местоположение), затем используйте следующее

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);

Для полноты, если пользователь не Если у вас не установлено приложение карт, то будет хорошей идеей перехватить ActivityNotFoundException, тогда мы сможем снова начать действие без ограничений приложения карт, мы можем быть почти уверены, что в конце мы никогда не доберемся до Toast, так как Интернет-браузер также является допустимым приложением для запуска этой схемы URL.

        String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        intent.setPackage("com.google.android.apps.maps");
        try
        {
            startActivity(intent);
        }
        catch(ActivityNotFoundException ex)
        {
            try
            {
                Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
                startActivity(unrestrictedIntent);
            }
            catch(ActivityNotFoundException innerEx)
            {
                Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
            }
        }

П.С. Любые широты или долготы, используемые в моем примере, не являются репрезентативными для моего местоположения, любое сходство с истинным местоположением является чистым совпадением, иначе я не из Африки: P

РЕДАКТИРОВАТЬ:

Для указаний теперь поддерживается навигация с помощью google.navigation

Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f +"," + 2f);//creating intent with latlng
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
.
7
задан BattleTested 24 April 2018 в 19:07
поделиться

1 ответ

Вам не требуется для присоединения к потоку, но это хорошая идея. Без вызова pthread_join () существует вероятность того, что функция main () вернется до завершения потока. В этом случае pthread_join () заставляет приложение ждать, пока другой поток не закончит обработку. Кроме того, когда вы присоединяетесь к потоку, это дает вам возможность проверить возвращаемые значения и убедиться, что все прошло гладко, и дает вам возможность очистить все ресурсы, которыми вы, возможно, поделились с потоком.

EDIT: Функция, которая может вас заинтересовать, - это pthread_detach (). pthread_detach () позволяет очистить хранилище потока после его завершения, поэтому нет необходимости присоединяться к потоку впоследствии.

8
ответ дан 7 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: