<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF162%3AAndroid</id>
		<title>LXF162:Android - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF162%3AAndroid"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF162:Android&amp;action=history"/>
		<updated>2026-05-13T15:17:42Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF162:Android&amp;diff=18527&amp;oldid=prev</id>
		<title>Olkol в 23:37, 9 октября 2018</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF162:Android&amp;diff=18527&amp;oldid=prev"/>
				<updated>2018-10-09T23:37:21Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF162:Android&amp;amp;diff=18527&amp;amp;oldid=18523&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF162:Android&amp;diff=18523&amp;oldid=prev</id>
		<title>Olkol: Новая страница: «Категория:Постоянные рубрики  Категория:Android    » Программирование Наладим взаимоде…»</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF162:Android&amp;diff=18523&amp;oldid=prev"/>
				<updated>2018-10-09T22:57:14Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&lt;a href=&quot;/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D1%8B%D0%B5_%D1%80%D1%83%D0%B1%D1%80%D0%B8%D0%BA%D0%B8&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Категория:Постоянные рубрики (страница не существует)&quot;&gt;Категория:Постоянные рубрики&lt;/a&gt;  &lt;a href=&quot;/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Android&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Категория:Android (страница не существует)&quot;&gt;Категория:Android&lt;/a&gt;    » Программирование Наладим взаимоде…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Категория:Постоянные рубрики]]  [[Категория:Android]]  &lt;br /&gt;
&lt;br /&gt;
» Программирование Наладим взаимодействие Android и Google&lt;br /&gt;
Android:&lt;br /&gt;
&lt;br /&gt;
Фо­то на кар­те&lt;br /&gt;
&lt;br /&gt;
LXF111.tut_adv.jkemp.psd&lt;br /&gt;
Наш эксперт&lt;br /&gt;
&lt;br /&gt;
Джуль­ет­та Кемп пи­шет ста­тьи для раз­лич­ных из­да­ний и сей­час ду­ма­ет над тем, как бы вос­поль­зо­вать­ся HTTP-под­клю­че­ни­ем сво­его те­ле­фо­на к сер­ве­ру.&lt;br /&gt;
&lt;br /&gt;
Ин­фор­ма­ция о ме­сто­по­ло­же­нии&lt;br /&gt;
&lt;br /&gt;
Ин­фор­ма­ция о ме­сто­по­ло­жении вклю­ча­ет не толь­ко ши­ро­ту и дол­го­ту, но и ку­чу дру­гих па­ра­мет­ров. Для досту­па к ним есть несколь­ко ме­то­дов в клас­се Location, а для их пред­став­ления в че­ло­ве­ко-чи­тае­мом ви­де при­го­дит­ся ме­тод toString() – ре­зуль­тат по­лу­чит­ся при­мер­но та­кой:&lt;br /&gt;
&lt;br /&gt;
Location[mProvider=gps,mTime=1339624800000,&lt;br /&gt;
&lt;br /&gt;
mLatitude=55.0, mLongitude=0.0,mHasAltitude=true,&lt;br /&gt;
&lt;br /&gt;
mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,&lt;br /&gt;
&lt;br /&gt;
mHasBearing=false,mBearing=0.0,mHasAccuracy=&lt;br /&gt;
&lt;br /&gt;
false,mAccuracy=0.0,mExtras=&lt;br /&gt;
Bundle[mParcelledData.dataSize=4]]&lt;br /&gt;
&lt;br /&gt;
Вот пол­ная ин­фор­ма­ция об этих па­ра­мет­рах:&lt;br /&gt;
&lt;br /&gt;
» Provider – про­вай­дер ме­сто­по­ло­жения, обыч­ные зна­чения – GPS или Network [Сеть].&lt;br /&gt;
» Time – вре­мя съем­ки по Грин­ви­чу (в мил­ли­се­кун­дах с 1 ян­ва­ря 1970 го­да).&lt;br /&gt;
» Latitude и Longitude – как сле­ду­ет из на­звания, ши­ро­та и дол­го­та в гра­ду­сах.&lt;br /&gt;
» hasAltitude, Altitude – ес­ли при­вяз­ка со­дер­жит ин­фор­ма­цию о вы­со­те над уровнем мо­ря (т. е. ес­ли hasAltitude рав­но true), Altitude со­дер­жит вы­со­ту в мет­рах.&lt;br /&gt;
» hasSpeed, Speed – ес­ли при­вяз­ка со­дер­жит ин­фор­ма­цию о ско­ро­сти, зна­чение Speed бу­дет нену­ле­вым. По умол­чанию ин­фор­ма­ции о ско­ро­сти не со­дер­жит­ся.&lt;br /&gt;
» hasBearing, Bearing – ес­ли при­вяз­ка со­дер­жит ин­фор­ма­цию об ази­му­те, Bearing со­дер­жит на­прав­ление дви­жения в гра­ду­сах к восто­ку от гео­гра­фи­че­­ско­­го се­ве­ра. На эму­ля­то­ре этих дан­ных нет, но на ре­аль­ном уст­рой­ст­ве они бы­ва­ют.&lt;br /&gt;
» hasAccuracy, Accuracy – ес­ли у про­вай­де­ра есть дан­ные о точ­но­сти, Accuracy со­дер­жит зна­чение до­пуска в мет­рах.&lt;br /&gt;
» Extras со­дер­жит всю до­полнитель­ную ин­фор­ма­цию о при­вяз­ке в ви­де пар «имя/зна­чение». Одним из та­ких па­ра­мет­ров мо­жет быть чис­ло спутников, ис­поль­зо­ван­ное для по­лу­чения при­вяз­ки.&lt;br /&gt;
Пол­ная стро­ка с па­ра­мет­ра­ми рас­по­ло­жения не слиш­ком по­лез­на про­грам­ме, за­то очень по­лез­на про­грам­ми­сту. На­при­мер, с по­мо­щью па­ра­мет­ра Bearing мож­но со­ри­ен­ти­ро­вать стрел­ку на кар­те (так­же есть ме­тод bearingTo(), ко­то­рый воз­вра­ща­ет на­прав­ление для за­дан­ной конеч­ной точ­ки).&lt;br /&gt;
&lt;br /&gt;
Ес­ли имеется точ­ная ин­фор­ма­ция о вы­со­те, то ее мож­но за­пи­сы­вать че­рез оп­ре­де­лен­ные ин­тер­ва­лы вре­мени, что­бы от­сле­жи­вать свой подъ­ем – это осо­бен­но удоб­но при ез­де на ве­ло­си­пе­де.&lt;br /&gt;
&lt;br /&gt;
Джуль­ет­та Кемп пи­шет про­стую про­грам­му, ко­то­рая при­вя­жет &lt;br /&gt;
фо­то­гра­фии к Google Maps с GPS.&lt;br /&gt;
&lt;br /&gt;
На этом уро­ке мы рас­смот­рим ин­тер­фейс GPS, а так­же вернем­ся к неко­то­рым дру­гим ком­понен­там сис­те­мы, ис­поль­зо­ван­ным в наших пре­ды­ду­щих стать­ях – API кар­ты [Map], ба­зы дан­ных [Database] и ка­ме­ры [Camera]. Под­роб­но этот код мы раз­би­рать не бу­дем, но весь он присутст­вует на DVD, по­это­му при необ­хо­ди­мо­сти его мож­но ско­пи­ро­вать, вста­вить и за­ста­вить ра­бо­тать (об­ра­ти­те внимание, что код, помещенный на DVD, не ском­пи­ли­ру­ет­ся в том виде, как он есть – нуж­но соз­дать но­вый про­ект, вруч­ную или в Eclipse, и им­пор­ти­ро­вать его).&lt;br /&gt;
&lt;br /&gt;
Шаг 1: Ба­зо­вая на­строй­ка GPS&lt;br /&gt;
&lt;br /&gt;
Ин­тер­фейс на­ше­го при­ло­жения прост: тес­то­вое по­ле (в ко­то­ром бу­дет по­ка­за­но ме­сто­по­ло­жение по­сле его оп­ре­де­ления) и три кноп­ки: Get Location [Оп­ре­де­лить ме­сто­по­ло­жение], Take Photo [Сде­лать снимок] и Show Map of Photos [По­ка­зать кар­ту с фо­то­гра­фия­ми]. На DVD най­ди­те XML-файл res/layout/main.xml. Пер­вые несколь­ко ме­то­дов в на­шем GPSPhoto вы­гля­дят так:&lt;br /&gt;
&lt;br /&gt;
private LocationManager lm; private TextView locationText;&lt;br /&gt;
&lt;br /&gt;
public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&lt;br /&gt;
super.onCreate(savedInstanceState);&lt;br /&gt;
&lt;br /&gt;
setContentView(R.layout.main);&lt;br /&gt;
&lt;br /&gt;
setUpButtons();&lt;br /&gt;
&lt;br /&gt;
locationText = (TextView) findViewById(R.id.location);&lt;br /&gt;
&lt;br /&gt;
lm = (LocationManager) getSystemService(LOCATION_SERVICE);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void setUpButtons() {&lt;br /&gt;
&lt;br /&gt;
Button getLocationButton = (Button) findViewById&lt;br /&gt;
(R.id.button_getlocation);&lt;br /&gt;
&lt;br /&gt;
getLocationButton.setOnClickListener(new View.OnClickListener() {&lt;br /&gt;
&lt;br /&gt;
public void onClick(View view) {&lt;br /&gt;
&lt;br /&gt;
getCurrentLocation();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
За­дание объ­ек­та LocationManager в ме­то­де onCreate() по­зво­лит нам ра­бо­тать с раз­лич­ны­ми про­вай­де­ра­ми и па­ра­мет­ра­ми ме­сто­по­ло­жения. С его по­мо­щью мы по­лу­ча­ем про­вай­дер ме­сто­по­ло­жения и те­ку­щее ме­сто­по­ло­жение в ме­то­де getCurrentLocation():&lt;br /&gt;
&lt;br /&gt;
public void getCurrentLocation() {&lt;br /&gt;
&lt;br /&gt;
LocationListener locationListener = new LocationListener() {&lt;br /&gt;
&lt;br /&gt;
public void onLocationChanged(Location location) {&lt;br /&gt;
&lt;br /&gt;
locationText.setText(location.toString());&lt;br /&gt;
&lt;br /&gt;
lm.removeUpdates(this);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void onStatusChanged(String provider, int status, Bundle extras) {}&lt;br /&gt;
&lt;br /&gt;
public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider){}&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);&lt;br /&gt;
&lt;br /&gt;
Location lastKnownLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);&lt;br /&gt;
&lt;br /&gt;
if (lastKnownLocation != null) {&lt;br /&gt;
&lt;br /&gt;
locationText.setText(lastKnownLocation.toString());&lt;br /&gt;
&lt;br /&gt;
} else {&lt;br /&gt;
&lt;br /&gt;
locationText.setText(“По­след­нее ме­сто­по­ло­же­ние не по­лу­чить”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
LocationListener, как мож­но до­га­дать­ся по на­званию, от­сле­жи­ва­ет из­менения ме­сто­по­ло­жения и, за­ме­тив та­ко­вое, за­пуска­ет ме­тод onLocationChanged(). Когда ме­сто­по­ло­жение ме­ня­ет­ся, мы уста­нав­ли­ва­ем зна­чение тек­сто­во­го по­ля [TextView] locationText в стро­ко­вое зна­чение GPS. Ос­таль­ные ме­то­ды LocationListener несу­ще­ст­вен­ны – по­ка оста­вим их пусты­ми.&lt;br /&gt;
&lt;br /&gt;
По соз­дании LocationListener его нуж­но за­ре­ги­ст­ри­ро­вать в LocationManager и вы­брать про­вай­де­ра. Здесь мы поль­зу­ем­ся про­вай­де­ром GPS (ес­ли он недосту­пен, об­ра­бот­ку ошиб­ки см. да­лее). Что­бы восполь­зо­вать­ся про­вай­де­ром GPS, так­же нуж­но уста­но­вить сле­дую­щие пра­ва досту­па в AndroidManifest.xml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION” /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иногда на по­лу­чение ин­фор­ма­ции о ме­сто­по­ло­жении ­тре­бует­ся вре­мя – в процессе ожидания мож­но, если удастся, по­лу­чить по­следнее из­вест­ное ме­сто­по­ло­жение вруч­ную и ис­поль­зо­вать его, по­ка LocationListener не опо­вес­тит нас о сле­дую­щем.&lt;br /&gt;
&lt;br /&gt;
Ес­ли вы­полнить этот код, у нас получится ре­зуль­тат сле­дую­щего вида:&lt;br /&gt;
&lt;br /&gt;
Location[mProvider=gps,mTime=1338588000000,&lt;br /&gt;
mLatitude=37.422005,mLongitude=-122.084095,&lt;br /&gt;
&lt;br /&gt;
mHasAltitude=true,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=false,&lt;br /&gt;
mAccuracy=0.0,mExtras=Bundle[mParcelledData.dataSize=4]]&lt;br /&gt;
&lt;br /&gt;
Здесь немало па­ра­мет­ров, ко­то­рые мо­гут нам при­го­дить­ся – под­роб­но­сти см. во врез­ке «Информация о местоположениии». Вы­та­щим от­сю­да ши­ро­ту и дол­го­ту и вы­ве­дем их с тре­мя зна­ка­ми по­сле за­пя­той с по­мо­щью клас­са DecimalFormat. Для это­го за­меним вы­зов setText() та­ким ко­дом:&lt;br /&gt;
&lt;br /&gt;
DecimalFormat latLngFormat = new DecimalFormat(“#.###”);&lt;br /&gt;
&lt;br /&gt;
String lat = Double.toString(Double.valueOf(latLngFormat.format(currentLocation.getLatitude())));&lt;br /&gt;
&lt;br /&gt;
String lng = Double.toString(Double.valueOf(latLngFormat.format(currentLocation.getLongitude()))); locationText.setText(“Шир: “ + lat + “, долг: “ + lng);&lt;br /&gt;
&lt;br /&gt;
От­правь­те од­но зна­чение пе­ред пе­ре­за­груз­кой эму­ля­то­ра, за­тем на­жми­те на кноп­ку Get Location и от­правь­те еще од­но, и вы уви­ди­те, как зна­чение из­менит­ся. Ес­ли вы сде­лае­те это еще раз, зна­чение ме­нять­ся не бу­дет, так как лис­тенер вы­клю­чен. Конеч­но, мож­но оста­вить его вклю­чен­ным, но это до­воль­но бы­ст­ро раз­ря­дит ба­та­рею, по­это­му луч­ше вы­клю­чать и сно­ва вклю­чать его при необ­хо­ди­мо­сти. В на­шем слу­чае – при ка­ж­дом вы­зо­ве getCurrent Location(), т. е. при на­жа­тии кноп­ки или при съем­ке фо­то­гра­фии.&lt;/div&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	</feed>