Открыть ссылку android java

Некоторые возможности использования Intent’ов

Объекты типа Intent могут быть использованы для общения между отдельными частями Android приложения, либо между различными приложениями системы. Мощь механизма интентов заключается в том, что с его помощью можно обращаться к любому установленному в системе приложению. Это позволяет повторно использовать некоторые компоненты и значительно сократить время на разработку.

В этой статье я покажу некоторые возможности использования класса Intent для обращения к системным приложениям.

Итак, что можно сделать с помощью Intenta:

1. Позвонить
 Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "123456789")); startActivity(dialIntent); 

Звонки можно также совершать, указав интенту первый параметр как ACTION_DIAL. При этом будет открываться телефонная книга с указанным номером, но сам звонок автоматически совершаться не будет. Этому параметру не нужны разрешения в манифесте.

2. Отправить смс
 Intent smsIntent = new Intent(Intent.ACTION_VIEW); smsIntent.setType("vnd.android-dir/mms-sms"); smsIntent.putExtra("sms_body", "Some SMS text"); startActivity(smsIntent); 

Т.к. этот код не отправляет смс напрямую, а запускает стандартное активити для отправки смс, то никаких разрешений указывать не нужно.

3. Получить контакт из телефонной книги
 Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.ContactsContract.Contacts.CONTENT_URI); startActivityForResult(pickIntent, PICK_RESULT); 

Этот код откроет стандартное приложение контактов. Метод startActivityForResult позволяет получить uri выбранного контакт из параметра Intent data переопределенного метода onActivityResult.

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

 Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT); pickIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); startActivityForResult(pickIntent, PICK_RESULT); 
4. Открыть ссылку в браузере
 Intent browseIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); startActivity(browseIntent); 

Данный код откроет переданную в параметре ссылку в одном из установленных браузеров. При этом пользователь сможет сам выбрать браузер для просмотра. Eсли ссылка ведет на YouTube, то можно сразу открыть видео стандартным YouTube приложением.
С помощью этого интента можно также открыть стандартный клиент Android Market с ссылкой на какое-либо приложение. Для этого необходимо в параметр uri передать ссылку вида market://search?q=search query, где search query необходимо заменить соответствующим поисковым запросом.
Разрешения на интернет указывать не нужно, т.к. сеть используется не напрямую, а через приложение браузер.

5. Расшарить контент/написать письмо
 Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Content subject"); shareIntent.putExtra(Intent.EXTRA_TEXT, "Content text"); startActivity(Intent.createChooser(shareIntent, "Sharing something.")); 

Интенту можно задать тему и текст контента, который необходимо разшарить. Метод Intent.createChooser() создает диалог выбора соответствующего приложения.
Если необходимо разшарить медиа контент (изображение/видео), то нужно указать соответствующий тип контента в методе setType, например mailIntent.setType(«image/png»);, а также добавить сам контент в extra интента:

 shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri); 
 shareIntent.putExtra(Intent.EXTRA_EMAIL, new String[] < mail >); 
6. Открыть карту по определенным координатам либо запросу
 String uri = "geo:"+ latitude + "," + longitude; Intent mapIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(mapIntent); 
  • geo:latitude,longitude
  • geo:latitude,longitude?z=zoom Параметр z — уровень зума при отображении карты (от 0 до 23)
  • geo:0,0?q=my+street+address
  • geo:0,0?q=business+near+city
7. Сделать снимок с камеры
 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_RESULT); 

Этот код запускает стандартное приложение камеры. Полученное с камеры изображение можно обработать в методе onActivityResult:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) < if (requestCode == CAMERA_RESULT) < Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ImageView ivCamera = (ImageView) findViewById(R.id.iv_camera); ivCamera.setImageBitmap(thumbnail); >> 

Изображение, полученное с камеры при этом можно сохранить в конкретной директории, добавив параметр в интент:

 File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(filePath))); 

Для использования этого интента не нужно разрешения android.permission.CAMERA, т.к. камера используется не напрямую, а всего лишь вызывается встроенное приложение камеры. Однако рекомендуется добавить в AndroidManifest следующую строку:

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

8. Позвонить какому-либо контакту через Skype

Для совершения звонка через скайп интенту необходимо указать конкретное имя активити и пакета, к которым он будет обращаться. Это немного усложняет код, т.к. в двух разных версиях скайпа имена пакетов отличаются. Необходимо выполнять проверку того, какая версия скайп клиента установлена в системе, и установлена ли она вообще. Для проверки можно использовать следующий метод:

 public static boolean isIntentAvailable(Context context, Intent intent) < final PackageManager packageManager = context.getPackageManager(); Listlist = packageManager.queryIntentActivities( intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; > 

Этот метод проверяет в системе наличие приложения, способного ответить на конкретный интент. С использованием этого метода код звонка через скайп будет выглядеть следующим образом:

 private static final String SKYPE_PATH_GENERAL = "com.skype.raider"; private static final String SKYPE_PATH_OLD = "com.skype.raider.contactsync.ContactSkypeOutCallStartActivity"; private static final String SKYPE_PATH_NEW = "com.skype.raider.Main"; Intent skypeIntent = new Intent().setAction("android.intent.action.CALL_PRIVILEGED"); skypeIntent.setData(Uri.parse("tel:" + skype)); if (isIntentAvailable(context, skypeIntent.setClassName(SKYPE_PATH_GENERAL, SKYPE_PATH_NEW))) < context.startActivity(skypeIntent); >else if (isIntentAvailable(context, skypeIntent.setClassName(SKYPE_PATH_GENERAL, SKYPE_PATH_OLD))) < context.startActivity(skypeIntent); >else

Более простым методом проверки наличия приложения в системе является перехват ActivityNotFoundException, которое будет вылетать в методе startActivity. Однако это позволит всего лишь среагировать на проблему, но не предотвратить ее. Например, используя вышеприведенный метод isIntentAvailable можно вовремя сделать соответствующий контрол неактивным, либо перенаправить пользователя на Android Market для установки соответствующего приложения.

9. Использовать Speech to Text для распознавания голоса
 Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); speechIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak please"); startActivityForResult(speechIntent, RESULT_SPEECH_TO_TEXT); 

Этот код запускает приложение распознавания речи. Если произнести что-либо, система обработает голос и вернет результат в метод onActivityResult:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) < if (requestCode == RESULT_SPEECH_TO_TEXT && resultCode == RESULT_OK) < ArrayListmatches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); TextView tvSpeech = (TextView) findViewById(R.id.tv_speech); tvSpeech.setText(matches.get(0)); > > 

Заключение

Механизм интентов предоставляет большие возможности разработчику. В этой статье я хотел показать примеры действий, которые можно реализовать проще с помощью интентов. Надеюсь она сэкономит кому-нибудь время на разработку.
Возможно существуют и другие интересные варианты использования интентов. Предлагаю делиться ими в комментариях.

Источник

Android Intent Open a URL in a browser

This example shows how you can open a URL programmatically in the built-in web browser rather than within your application. This allows your app to open up a webpage without the need to include the INTERNET permission in your manifest file.

public void onBrowseClick(View v) < String url = "http://www.google.com"; Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); // Verify that the intent will resolve to an activity if (intent.resolveActivity(getPackageManager()) != null) < // Here we use an intent without a Chooser unlike the next example startActivity(intent); >> 

Prompting the user to select a browser

Note that this example uses the Intent.createChooser() method:

public void onBrowseClick(View v) < String url = "http://www.google.com"; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); // Note the Chooser below. If no applications match, // Android displays a system message.So here there is no need for try-catch. startActivity(Intent.createChooser(intent, "Browse with")); >

In some cases, the URL may start with «www». If that is the case you will get this exception:

android.content.ActivityNotFoundException : No Activity found to handle Intent

The URL must always start with «http://» or «https://». Your code should therefore check for it, as shown in the following code snippet:

if (!url.startsWith("https://") && !url.startsWith("http://")) < url = "http://" + url; >Intent openUrlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); if (openUrlIntent.resolveActivity(getPackageManager()) != null)

Best Practices

Check if there are no apps on the device that can receive the implicit intent. Otherwise, your app will crash when it calls startActivity() . To first verify that an app exists to receive the intent, call resolveActivity() on your Intent object. If the result is non-null, there is at least one app that can handle the intent and it’s safe to call startActivity() . If the result is null, you should not use the intent and, if possible, you should disable the feature that invokes the intent.

pdf

PDF — Download Android for free

Источник

Урок 31. Вызываем браузер, звонилку, карты с помощью intent с атрибутом data – Uri | Уроки Android Studio

В этом уроке мы создадим приложение, которое будет вызывать системные приложения: интернет-браузер – чтобы открыть ссылку, диалер – чтобы позвонить по номеру, и приложение Google-карты – чтобы показать на карте заранее определенные координаты.

Скачать файлы для установки Google Apps на эмулятор Genymotion
Код проекта – под видео:

import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener < Button btnWeb; Button btnMap; Button btnCall; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnWeb = (Button) findViewById(R.id.btnWeb); btnMap = (Button) findViewById(R.id.btnMap); btnCall = (Button) findViewById(R.id.btnCall); btnWeb.setOnClickListener(this); btnMap.setOnClickListener(this); btnCall.setOnClickListener(this); >@Override public void onClick(View v) < Intent intent; switch (v.getId()) < case R.id.btnWeb: intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://developer.android.com")); startActivity(intent); break; case R.id.btnMap: intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("geo:-0.45609946,-90.26607513")); startActivity(intent); break; case R.id.btnCall: intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:12345")); startActivity(intent); break; >> >

Больше уроков:
Инструменты android разработчика: тут
Дизайн android приложений: тут
Уроки создания игр для android: тут
Основы программирования на JAVA: тут

Источник

Работа с WebView в Android: пример и описание возможностей

Работа с WebView в Android: пример и описание возможностей | Prologistic.com.ua

В Android есть несколько способов отображения HTML-страниц в вашем приложении. Наиболее эффективным способом является использование виджета Android WebView — о нем мы сегодня и поговорим.

Компонент WebView в Android представляет собой полноценный браузер, который реализован как подкласс View, поэтому мы с легкостью можем встроить его в наше приложение на Android.

Подробно о WebView в Android: что, как и почему

Чаще всего для работы с простыми html-страницами используется виджет TextView . В этом случае мы можем реализовать статический метод fromHtml() , который принадлежит утилитному HTML классу для парсинга строк с html кодом и дальнейшим его отображением в TextView .

Виджет TextView обеспечивает простое форматирование для стилей (жирный, курсив), шрифтов, различным цветов, гиперссылок и т.д.

Однако со сложным форматированием и большим объемом HTML-страниц виджет TextView справиться уже не в состоянии. Например, работать с такими функциональными и объемными сайтами, как Facebook или другие соц сети через TextView уже не получится.

В таких случаях на помощь приходит WebView , так как только он может обрабатывать большие обхемы и множество HTML-тегов. Виждет WebView также может работать с CSS и JavaScript , которые метод Html.fromHtml() бы просто проигнорировал.

WebView также обеспечивает работу с историей посещений и навигацией назад и вперед по страницам.

Тем не менее WebView также имеет целый набор недостатков: с точки зрения эффективности потребления памяти он значительно уступает TextView . Причиной большого потребления памяти WebView является веб-движок рендеринга контента WebKit/Blink, который еще используется в таких браузерах, как Chrome.

Руководство по работе с WebView

Ниже представлен пример работы с макетом, установкой виджета в коде и обзор наиболее полезных методов при работе с WebView в Android.

1. Установка WebView в макете

Компонент WebView вставляется в тот файл XML-макета, где мы хотим видеть виджет WebView . Давайте создадим простой Hello World проект на Android и посмотрим его работу в макете activity_main.xml :

Источник

Читайте также:  Тег IMG
Оцените статью