Практическое задание 4


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Практическое задание 4.

Итоговый результат:



1. Открыть программу
Android

Studio
.
Создать проект, кликнув на пункт меню

Start

a

new

Android

Studio

project
”.

Откроется следующее окно, где нужно заполнить поля в следующем виде:



Application name:

Call

Intent



Company Domain
: limtu.ru



Package name:

ru.limtu.
call
intent



Project

location
:

указываете самостоятельно, главное без символов кириллицы в названии пути.

Кликнем

Next
”.

2.

В
новом

окне, ставим галочку напротив

Phone

and

Tablet


(
как правило
,

все ставится по
умолчанию, проверить правильность заполнения и кликнуть

Next
”).

Minimum SDK
: API 15:Android 4.0.3 (
IceCreamSandwich).

(
можно

API

19)

3
.
В окне выбора макета, следует выбрать шаблон под названием

Empty

Activity


и нажать на кнопку

Next
”.

4. Оставить поля по умолчанию. Создание нового проекта окончено, кликнем

Finish


для дальнейшей
работы.

Начинается сборка проекта, обычно занимает несколько минут.

5.
Откройте

файл

интерфейса

activity



activity
_
main
.
xml

и введите следующий код
.

?
xml
version=
"1.0"
encoding=
"utf
-
8"
�?

LinearLayout
xmlns:
android
=
"http://schemas.android.com/apk/res/android"


xmlns:
tools
=
"http://schemas.android.com/tools"


android
:id=
"@+id/activity_main"


android
:layout_width=
"match_parent"


android
:layout_height=
"match_parent"


android
:paddingBottom=
"@dimen/activity_vertical_margin"


android
:paddingLeft=
"@dimen/activity_horizontal_margin"


android
:paddingRight=
"@dimen/activity_horizontal_margin"


android
:paddingTop=
"@dimen/activity_verti
cal_margin"


android
:orientation=
"vertical"


tools
:context=
"ru.limtu.callexplicitintents.MainActivity"




Button


android
:layout_width=
"match_parent"


android
:layout_height=
"wrap_content"


android
:id=
"@+id/btnCall"


an
droid
:text=
"@string/call"
�/



Button


android
:layout_width=
"match_parent"


android
:layout_height=
"wrap_content"


android
:id=
"@+id/btnMap"


android
:text=
"@string/map"
�/



Button


android
:layout_width=
"match_parent"


android
:layout_height=
"wrap_content"


android
:id=
"@+id/btnWeb"


android
:text=
"@string/web"
�/



Button


android
:layout_width=
"match_parent"


android
:layout_height=
"wrap_content"


android
:id=
"@+id/btnSend"


android
:text=
"@string/send"
�/

&#x/Lin;êrL; you;&#xt000;/LinearLayout



6. Добавьте новые значения строк в файле
string
.
xml
.

&#xreso;&#xurce;&#xs000;resources


string
name=
"app_name"

Call Intents
&#x/str;&#xing0;/string


string
name=
"call"

Call
&#x/str;&#xing0;/string


string
name=
"map"

View Map
&#x/str;&#xing0;/string



string
name=
"web"

View Web page
&#x/str;&#xing0;/string


string
name=
"send"

Send Mail
&#x/str;&#xing0;/string

&#x/res;&#xourc;s00;/resources


7.
Во вкладе
Design
,
у вас должно отобразиться следующее:



8.
Присвоим
поле
Button

в текущей активности.

@Override

protected void
onCreate
(Bundle savedInstanceState) {


super
.onCreate(savedInstanceState)
;


activity_main
)
;



Button btnCall = (Button) findViewById(R.id.
btnCall
)
;


Button
btnMap = (Button) findViewById(R.id.
btnMap
)
;


Button btnWeb = (Button) findViewById(R.id.
btnWeb
)
;


Button btnSend = (Button) findViewById(R.id.
btnSend
)
;


9.
Н
еявн
ый

Intent

с данными
URI
.

Если ваши данные является

парами данных

URI, вы можете использовать простой конструктор для
создания
неявного намерения.



I
ntent

для набора номера телефона
:

Uri number = Uri.parse("tel:11061991");

Intent callIntent = new Intent(Intent.ACTION_DIAL, number);






Intent

для просмотра карты
:

//
Т
о
чка
на карте на основании широты/долготы

Uri location = Uri.parse("geo:37.422219,
-
122.08364?z=14"); //
параметр
z

для масштабировании карты


Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);




Intent

для открытия веб
-
страницы в браузере
:

Uri webpage = Uri.parse("http://www.
vk
.com");

Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);



1
0
.
Теперь свяжем обработчик событий
View
.
OnClickListenter

с нашими кнопками для открытия
диалогового окна в приложении.


new
View.OnClickListener() {


@Override


public void
onClick
(View v) {


Uri number = Uri
.
parse
(
"tel:"
)
;


Intent callIntent =
new
Intent(Intent.
ACTION_DIAL
,
number)
;



}

})
;



new
View.OnClickListener() {


@Override


public void
onClick
(View v) {


Uri location = Uri.
parse
(
"geo:37.422219,
-
122.08364?z=14"
)
;


Intent mapIntent =
new
Intent(I
ntent.
ACTION_VIEW
,
location)
;



}

})
;


new
View.OnClickListener() {


@Override


public void
onClick
(View v) {


Uri webpage = Uri.
parse
(
"http://www.vk.com"
)
;


Intent webIntent =
new
Intent(Intent.
ACTION_VIEW
,
webpage)
;



}

})
;



1
1
.

Неявный

Intent

с

EXTRA
_
DATA
.


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

По умолчанию система определяет соответствующий тип
MIME

требуемого намерения на основе данных
Uri
, который
должен быть
включен.




Intent

для отправки сообщения
по электронной почте:


Intent emailIntent = new Intent(Intent.ACTION_SEND);


emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);

emailIntent.putExtra
(Inte
nt.EXTRA_EMAIL, new String[] {"default_
e
mail
@gmail.com"});

emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");

emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");





12.
Добавим
Intent

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

приложение
G
M
ail
.


new
View.OnClickListener
() {


@Override


public void
onClick
(View v) {


Intent emailIntent =
new
Intent(Intent.
ACTION_SENDTO
,
Uri.
fromParts
(
"mailto"
,
"your_e
mail
@gmail.com"
, null
))
;



emailIntent.putExtra(Intent.
EXTRA_EMAIL
, new
String[]{
"asel
-
[email protected],

[email protected]"
})
;


emailIntent.putExtra(Intent.
EXTRA_SUBJECT
,
"Hello"
)
;


emailIntent.putExtra(Intent.
EXTRA_TEXT
,
"I text mail by Android APP!"
)
;



}

})
;



13. Для того

чтобы проверить все ли
значения

передают данные
виджету
Button

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


Этап проверки достаточно прост:


private boolean isIntentSafe(Intent intent){


//
проверка

работы


PackageManager packageManager = getPackageManager();


ListResolveInf&#xReso;&#xlv9e;&#x-13I;n-;鼐&#xo000;o activities = packageManager.queryIntentActivities(intent, 0);


return activities.size�() 0;

}

Применение
:

if(isIntentSafe(callIntent))


startActivity(callIntent);

else


Toast.makeText(getApplicationContext(), "You
r phone have no app
!",

Toast.LENGTH_SHORT)
;


14.

Вставим

метод

isIntentSafe

после

метода

onCreate
.




private boolean
isIntentSafe
(Intent intent) {


;


&#xReso;&#xlveI;&#xnfo0;ListResolveInfo activities = packageMa
nager.queryIntentActivities(intent
,
0
)
;


�activities.size()
0
;

}



15.
Теперь требуется добавить условие проверки в кажд
ый обработчик событий
View
.
OnClickListenter
.



if
(isIntentSafe(callIntent))


startActivity(callIntent)
;

else


Toast.
,
"Your phone have no app can dial!"
,
Toast.
LENGTH_SHORT
).show()
;

16.
Запустите приложение и попробуйте запу
стить каждую кнопку,
убедитесь, что у вас нет ошибок
отображения или ошибки при вызове нового приложения.



Полный

листинг

MainActivity.java

package
ru.limtu.callexplicitintents
;


import
android.content.Intent
;

import
android.content.pm.PackageManager
;

import
android.content.pm.ResolveInfo
;

import
;

import
android.support.v7.app.AppCompatActivity
;

import
android.os.Bundle
;

import

android.view.View
;

import
;

import
;


import
java.util.List
;



public class
MainActivity
extends
AppCompatActivity {



@Override


protected void
onCreate
(Bundle savedInstanceState) {


super
.onCreate(sa
vedInstanceState)
;


activity_main
)
;



Button btnCall = (Button) findViewById(R.id.
btnCall
)
;


Button btnMap = (Button) findViewById(R.id.
btnMap
)
;


Button btnWeb = (Button) findViewById(R.id.
btnWeb
)
;



Button btnSend = (Button) findViewById(R.id.
btnSend
)
;




new
View.OnClickListener() {


@Override


public void
onClick
(View v) {


Uri number = Uri.
parse
(
"tel:"
)
;


Intent

callIntent =
new
Intent(Intent.
ACTION_DIAL
,
number)
;



if
(isIntentSafe(callIntent))


startActivity(callIntent)
;


else


Toast.
,
"Your phone have no app can

dial!"
,
Toast.
LENGTH_SHORT
).show()
;


}


})
;




new
View.OnClickListener() {


@Override


public void
onClick
(View v) {


Uri location = Uri.
parse
(
"geo:37.422219,
-
122.08364?z=14"
)
;


Intent mapIntent =
new
Intent(Intent.
ACTION_VIEW
,
location)
;



if
(isIntentSafe(mapIntent))


startActivity(mapIntent)
;


else


Toast.
xt
,
"Your phone have no app can
view map!"
,
Toast.
LENGTH_LONG
).show()
;


}


})
;



new
View.OnClickListener() {


@Override


public void
onClick
(View v) {



Uri webpage = Uri.
parse
(
"http://www.vk.com"
)
;


Intent webIntent =
new
Intent(Intent.
ACTION_VIEW
,
webpage)
;



if
(isIntentSafe(webIntent))


startActivity(webIntent)
;


else



Toast.
,
"Your phone have no app can
open webpage!"
,
Toast.
LENGTH_LONG
).show()
;


}


})
;



new
View.OnClickListener() {


@Override


public void
onClick
(View v) {


Intent emailIntent =
new
Intent(Intent.
ACTION_SENDTO
,
Uri.
fromParts
(
"mailto"
,
"[email protected]"
, null
))
;



emailIntent.putExtra(Intent.
EXTRA_EMAIL
, new
String[]{
"asel
-
[email protected], [email protected]"
})
;


emailIntent.putExtra(Intent.
EXTRA_SUBJECT
,
"Hello"
)
;


emailIntent.putExtra(Intent.
EXTRA_TEXT
,
"I text mail by Android APP!"
)
;



if
(isIntentSafe(emailIntent))


startActivity(emailIntent)
;


else


Toast.
,
"Your phone have no app
send email!"
,
Toast.
LENGTH_LONG
).show()
;


}


})
;



}



private boolean
isIntentSafe
(Intent intent) {


PackageMa
;


&#xReso;&#xlveI;&#xnfo0;ListResolveInfo activities = packageManager.queryIntentActivities(intent
,
0
)
;


�activities.size()
0
;


}



}



Приложенные файлы

  • pdf 16202574
    Размер файла: 501 kB Загрузок: 2

Добавить комментарий