Урок 31. Зачем у Intent есть атрибут data. Что такое Uri. Вызываем системные приложения
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Здравствуйте.
При исполнении
intent.setData(Uri.parse("geo:55.754283,37.62002"));
startActivity(intent);
аппликация рушится в эмуляторе.
стек такой:
Instrumentation.checkStartActivityResult(int, Object) line: 1409
Instrumentation.execStartActivity(Context, IBinder, IBinder, Activity, Intent, int) line: 1379
MainActivity(Activity).startActivityForResult(Intent, int) line: 2827
MainActivity(Activity).startActivity(Intent) line: 2933
MainActivity.onClick(View) line: 44
Button(View).performClick() line: 2485
попытался отдебагировать и выяснил что текущая версия android.jar ( 19.2 ) несколько отличается от ее же версии сорса ( и тем самым line в стеке не соответствуют сорсу )
кто поможет ?
я учу android несколько дней и очень рад и сайту и от форуму.
При исполнении
intent.setData(Uri.parse("geo:55.754283,37.62002"));
startActivity(intent);
аппликация рушится в эмуляторе.
стек такой:
Instrumentation.checkStartActivityResult(int, Object) line: 1409
Instrumentation.execStartActivity(Context, IBinder, IBinder, Activity, Intent, int) line: 1379
MainActivity(Activity).startActivityForResult(Intent, int) line: 2827
MainActivity(Activity).startActivity(Intent) line: 2933
MainActivity.onClick(View) line: 44
Button(View).performClick() line: 2485
попытался отдебагировать и выяснил что текущая версия android.jar ( 19.2 ) несколько отличается от ее же версии сорса ( и тем самым line в стеке не соответствуют сорсу )
кто поможет ?
я учу android несколько дней и очень рад и сайту и от форуму.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Добрый вечер!
При создании проекта выбираю Target SDK Android 2.3.3, Compile with Google APIs(API10). При это в проекте не создается класс R.java с соотв. ошибкой: cannot resolve symbol r.
Если проделать все то же самое, но Compile with выбрать не Google APIs а API10, то все ОК.
В чем может быть загвоздка?
Спасибо!
При создании проекта выбираю Target SDK Android 2.3.3, Compile with Google APIs(API10). При это в проекте не создается класс R.java с соотв. ошибкой: cannot resolve symbol r.
Если проделать все то же самое, но Compile with выбрать не Google APIs а API10, то все ОК.
В чем может быть загвоздка?
Спасибо!
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Здравствуйте!
Прохожу данный урок и по совету обновил sdk до версии 22.6.1.
Теперь у меня при создании нового проекта (min, target, compile = 4.2) в activity_main.xml создается контейнер, в который загружается fragment_main.xml, в котором я уже размещаю компоненты, требуемые для урока. Следовательно, в классе MainACtivity.java размещенные компоненты не доступны.
Если забить на созданный fragment и размещать компоненты непосредственно в activity_main.xml, то все нормально работает. Так вот, зачем дополнительно создается фрагмент? теперь его каждый раз выпиливать из кода?
Содержимое fragment_main.xml
Содержимое activity-main.xml
Код MainActivity.java
Прохожу данный урок и по совету обновил sdk до версии 22.6.1.
Теперь у меня при создании нового проекта (min, target, compile = 4.2) в activity_main.xml создается контейнер, в который загружается fragment_main.xml, в котором я уже размещаю компоненты, требуемые для урока. Следовательно, в классе MainACtivity.java размещенные компоненты не доступны.
Если забить на созданный fragment и размещать компоненты непосредственно в activity_main.xml, то все нормально работает. Так вот, зачем дополнительно создается фрагмент? теперь его каждый раз выпиливать из кода?
Содержимое fragment_main.xml
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.p0312_simpleintents.MainActivity$PlaceholderFragment" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/webButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Web" />
<Button
android:id="@+id/mapsButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Maps" />
<Button
android:id="@+id/callButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Call" />
</LinearLayout>
Код: Выделить всё
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.p0311_simpleintents.MainActivity"
tools:ignore="MergeRootFrame" />
Код: Выделить всё
package com.example.p0311_simpleintents;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
private Button webButton;
private Button mapsButton;
private Button callButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
webButton = (Button) findViewById(R.id.webButton);
if (webButton == null)
Log.d("PO312", "web is null!!!");
mapsButton = (Button) findViewById(R.id.mapsButton);
callButton = (Button) findViewById(R.id.callButton);
webButton.setOnClickListener(this);
mapsButton.setOnClickListener(this);
callButton.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
@Override
public void onClick(View v) {
Intent intent = null;
switch (v.getId()) {
case R.id.webButton:
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.habrahabr.ru"));
startActivity(intent);
break;
case R.id.mapsButton:
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:55.754283,37.62002"));
break;
default:
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData( Uri.parse("tel:12345"));
startActivity(intent);
break;
}
}
}
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Нет не нужно выпиливать, просто нужно научиться работать с фрагментами. На эту тему есть уроки. Доступ к элементам фрагмента получается немногим сложнее, чем к элементам активити.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Спасибо за ответ. Кажется, теперь я понимаю как и что.klblk писал(а):Нет не нужно выпиливать, просто нужно научиться работать с фрагментами. На эту тему есть уроки. Доступ к элементам фрагмента получается немногим сложнее, чем к элементам активити.
Как я понимаю, нужно работать с виджетами в классе фрагмента так, как это было прежде в активити. И тут возникает 2 варианта:
1) Выносить код фрагмента в отдельный класс, чтобы не загромождать класс активити
2) Оставлять внутри активити, т.к. это по сути единоразово используемый код и его не следует выносить наружу.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
А еще вдогонку вопрос. В будущем, если мне нужно будет доп. экран создавать, то как лучше делать: создавать новую активити и вызывать ее через startActivity() или создавать новый фрагмент и переключать его в главной активити MainActivity?
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Думаю тут зависит от выполняемой задачи. Причем в рамках одного приложения могут встречаться оба варианта.ReFLeXive писал(а):А еще вдогонку вопрос. В будущем, если мне нужно будет доп. экран создавать, то как лучше делать: создавать новую активити и вызывать ее через startActivity() или создавать новый фрагмент и переключать его в главной активити MainActivity?
Одноуровневые(равнозначные) элементы интерфейса можно организовать подменой фрагментов (например как gmail: все, входящие, исходящие и т.д.), а когда например нужно открыть детали элемента списка, то делать это в отдельной активити (в томже gmail клик по письму).
Можно вот этот урок посмотреть http://startandroid.ru/ru/uroki/vse-uro ... ranah.html, маленько не о том, но некоторые возможности работы с фрагментами раскрывает.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Здравствуйте. А как сделать так, чтобы можно было в один клик вернуться к нашей MainActivity? Т.е. допутсим я нажал кнопку Web, открылся браузер и я погулял в сети от ссылке к ссылки. Теперь я хочу сразу вернуться туда, где я запустил этот браузер. Кнопка назад будет просто возвращать меня на предыдущие сайты/страницы.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
нет, управлять кнопками в другом приложении вам нельзя. Раз попали туда, так попали.. Сама за это браузеры не люблю. Нажимаешь кнопку с домиком (зависит от прошивки), держишь ее, попадаешь в список задач и там жмешь на свою - попадаешь в то место, откуда ушел.
По-другому вряд ли.
По-другому вряд ли.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Да, вот этого как раз и хотел избежать. Иначе теряется ощущение работы в одном и том же приложении. Спасибо.Foenix писал(а):Нажимаешь кнопку с домиком (зависит от прошивки), держишь ее, попадаешь в список задач и там жмешь на свою - попадаешь в то место, откуда ушел.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
не получится. Тогда свой браузер встраивай если тебе допустим нужно всего 1страничку показать.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
05-23 15:10:35.101: E/AndroidRuntime(410): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=geo:55.754283,37.62002 }
Та же ошибка, что у товарища выше. Тоже не работает только карта. Но, в отличие от него, папка Google APIs, вроде бы, импортирована в проект, но дело это не исправляет. Другие напрягающие моменты:
При запуске проекта выводится ошибка от AVD "No compatible targets were found. Do you wish to add a new Android Virtual Device?". В выводимом после нажатия на любую кнопку окне стоит жирный красный крест в колонке Target напротив Android 2.3.3.
Спасибо, написал, не успел отправить - получил озарение, сам разобрался. Здесь оставляю для потомков и на случай если ещё у кого будет подобная же проблема. Если симптомы совпадают, проверьте, стоит ли у вас в настройках вашего AVD GoogleAPI 10 или простой 2.3.3 API 10. Он обладает неудобной особенностью сбрасывать на простой 2.3.3 API при выборе девайса.
Та же ошибка, что у товарища выше. Тоже не работает только карта. Но, в отличие от него, папка Google APIs, вроде бы, импортирована в проект, но дело это не исправляет. Другие напрягающие моменты:
При запуске проекта выводится ошибка от AVD "No compatible targets were found. Do you wish to add a new Android Virtual Device?". В выводимом после нажатия на любую кнопку окне стоит жирный красный крест в колонке Target напротив Android 2.3.3.
Спасибо, написал, не успел отправить - получил озарение, сам разобрался. Здесь оставляю для потомков и на случай если ещё у кого будет подобная же проблема. Если симптомы совпадают, проверьте, стоит ли у вас в настройках вашего AVD GoogleAPI 10 или простой 2.3.3 API 10. Он обладает неудобной особенностью сбрасывать на простой 2.3.3 API при выборе девайса.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
У меня в последней загруженной версии Эклипса нет выбора АВД (см. файл AVD.jpg)
Пытаюсь сделать выбор устройства тут (см. файл case.jpg).
Но с картой Гугл номер не проходит.
Поэтому сайт показал, экран набора телефона увидел. А вот с картой проблема.
З.Ы.
В этой версии и СДК менеджер - это отдельный файл.
Пытаюсь сделать выбор устройства тут (см. файл case.jpg).
Но с картой Гугл номер не проходит.
Поэтому сайт показал, экран набора телефона увидел. А вот с картой проблема.
З.Ы.
В этой версии и СДК менеджер - это отдельный файл.
- Вложения
-
- case.jpg (84.45 КБ) 15461 просмотр
-
- AVD.jpg (68.54 КБ) 15461 просмотр
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Добрый день а можно инструкция по установке приложения Google Maps. Или подскажите как открывать ссылки в pdf книге Startandroid (слова бирюзового цвета с подчеркиванием) а то они не работают. Вообще не понятно что они должны делать. Открытие ссылок стало проблемой именно на этом уроке...
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Да. именно на этом уроке я застопорился тоже. Тоже не работает только карта.dimitrius писал(а):Открытие ссылок стало проблемой именно на этом уроке...
Нужно более подробное описание действий. Да, ссылка на инструкцию в уроке есть. Но текст по этой ссылке очень "относительный". А для начинающего нужно чуть больше разжевать (ИМХО).
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
не работает MAP (
При нажатии на кнопку MAP появляется "Unfortunately ,P0311_Simplentents has stopped"
Google APIs - в SDK установлено ,пробывал разные версии Android но в эмуляторе почему то нету карт ?
При нажатии на кнопку MAP появляется "Unfortunately ,P0311_Simplentents has stopped"
Google APIs - в SDK установлено ,пробывал разные версии Android но в эмуляторе почему то нету карт ?
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Уважаемый автор уроков.
Количество учеников с неработающей кнопкой МАР увеличивается с каждым днём!
Понятно, что проект не коммерческий. Но всё же?
Мы очень хотим освоить Андроид! Но одно не понятое место полностью стопорит процесс обучения.
Огромная просьба уделить немного внимания своим ученикам.
З.Ы. Надеюсь, что проект не заброшен.
Количество учеников с неработающей кнопкой МАР увеличивается с каждым днём!
Понятно, что проект не коммерческий. Но всё же?
Мы очень хотим освоить Андроид! Но одно не понятое место полностью стопорит процесс обучения.
Огромная просьба уделить немного внимания своим ученикам.
З.Ы. Надеюсь, что проект не заброшен.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Приложению не требуется доступ в интернет, потому что его активити сами в интернет не ходят.Также в файле манифеста приложения, на вкладке Permission добавьте элемент Uses Permission и справа в поле Name выберите android.permission.INTERNET. Это даст приложению доступ в интернет. Правда у меня почему-то и без этого все работает … Пока не понял почему.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Код: Выделить всё
01-04 18:35:20.044 427-427/p0311simpleintents.develop.startandroid.ru.p0311_simpleintents E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=geo:55.754283,37.62002 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
at android.app.Activity.startActivityForResult(Activity.java:2827)
at android.app.Activity.startActivity(Activity.java:2933)
at p0311simpleintents.develop.startandroid.ru.p0311_simpleintents.MainActivity.onClick(MainActivity.java:43)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Код: Выделить всё
package p0311simpleintents.develop.startandroid.ru.p0311_simpleintents;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.OnClickListener {
Button btnWeb;
Button btnMap;
Button btnCall;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.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:55.754283,37.62002"));
startActivity(intent);
break;
case R.id.btnCall:
intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:12345"));
startActivity(intent);
break;
}
}
}
Код: Выделить всё
[/<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="p0311simpleintents.develop.startandroid.ru.p0311_simpleintents" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
code]
[code]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<Button
android:id="@+id/btnWeb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Web">
</Button>
<Button
android:id="@+id/btnMap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Map">
</Button>
<Button
android:id="@+id/btnCall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Call">
</Button>
</LinearLayout>
-
- Сообщения: 1
- Зарегистрирован: 07 фев 2015, 18:13
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Из статьи...
P.S. может кто-то ответил на этот вопрос, комментарии не читал)))
...я думаю, что приложение по сути само не требует доступа в интернет, а вызывает другую активность которая уже имеет такое право в манифесте)))...Правда у меня почему-то и без этого все работает … Пока не понял почему...
P.S. может кто-то ответил на этот вопрос, комментарии не читал)))