Урок 31. Зачем у Intent есть атрибут data. Что такое Uri. Вызываем системные приложения

Обсуждение уроков
SashaGor
Сообщения: 1
Зарегистрирован: 05 янв 2014, 20:09

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение SashaGor » 09 янв 2014, 13:43

Здравствуйте.
При исполнении
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 несколько дней и очень рад и сайту и от форуму.

aldir
Сообщения: 1
Зарегистрирован: 27 янв 2014, 22:39

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение aldir » 22 фев 2014, 00:32

Добрый вечер!
При создании проекта выбираю Target SDK Android 2.3.3, Compile with Google APIs(API10). При это в проекте не создается класс R.java с соотв. ошибкой: cannot resolve symbol r.
Если проделать все то же самое, но Compile with выбрать не Google APIs а API10, то все ОК.
В чем может быть загвоздка?
Спасибо!

ReFLeXive
Сообщения: 3
Зарегистрирован: 23 мар 2014, 13:57

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение ReFLeXive » 23 мар 2014, 14:14

Здравствуйте!
Прохожу данный урок и по совету обновил 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>
Содержимое activity-main.xml

Код: Выделить всё

<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" />
Код MainActivity.java

Код: Выделить всё

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;
		}
	}

}


Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение klblk » 24 мар 2014, 05:56

Нет не нужно выпиливать, просто нужно научиться работать с фрагментами. На эту тему есть уроки. Доступ к элементам фрагмента получается немногим сложнее, чем к элементам активити.

ReFLeXive
Сообщения: 3
Зарегистрирован: 23 мар 2014, 13:57

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение ReFLeXive » 24 мар 2014, 16:23

klblk писал(а):Нет не нужно выпиливать, просто нужно научиться работать с фрагментами. На эту тему есть уроки. Доступ к элементам фрагмента получается немногим сложнее, чем к элементам активити.
Спасибо за ответ. Кажется, теперь я понимаю как и что.
Как я понимаю, нужно работать с виджетами в классе фрагмента так, как это было прежде в активити. И тут возникает 2 варианта:
1) Выносить код фрагмента в отдельный класс, чтобы не загромождать класс активити
2) Оставлять внутри активити, т.к. это по сути единоразово используемый код и его не следует выносить наружу.

ReFLeXive
Сообщения: 3
Зарегистрирован: 23 мар 2014, 13:57

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение ReFLeXive » 25 мар 2014, 10:54

А еще вдогонку вопрос. В будущем, если мне нужно будет доп. экран создавать, то как лучше делать: создавать новую активити и вызывать ее через startActivity() или создавать новый фрагмент и переключать его в главной активити MainActivity?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение klblk » 27 мар 2014, 06:22

ReFLeXive писал(а):А еще вдогонку вопрос. В будущем, если мне нужно будет доп. экран создавать, то как лучше делать: создавать новую активити и вызывать ее через startActivity() или создавать новый фрагмент и переключать его в главной активити MainActivity?
Думаю тут зависит от выполняемой задачи. Причем в рамках одного приложения могут встречаться оба варианта.
Одноуровневые(равнозначные) элементы интерфейса можно организовать подменой фрагментов (например как gmail: все, входящие, исходящие и т.д.), а когда например нужно открыть детали элемента списка, то делать это в отдельной активити (в томже gmail клик по письму).
Можно вот этот урок посмотреть http://startandroid.ru/ru/uroki/vse-uro ... ranah.html, маленько не о том, но некоторые возможности работы с фрагментами раскрывает.

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Sebler » 20 апр 2014, 20:38

Здравствуйте. А как сделать так, чтобы можно было в один клик вернуться к нашей MainActivity? Т.е. допутсим я нажал кнопку Web, открылся браузер и я погулял в сети от ссылке к ссылки. Теперь я хочу сразу вернуться туда, где я запустил этот браузер. Кнопка назад будет просто возвращать меня на предыдущие сайты/страницы.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Foenix » 20 апр 2014, 22:13

нет, управлять кнопками в другом приложении вам нельзя. Раз попали туда, так попали.. Сама за это браузеры не люблю. Нажимаешь кнопку с домиком (зависит от прошивки), держишь ее, попадаешь в список задач и там жмешь на свою - попадаешь в то место, откуда ушел.
По-другому вряд ли.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Sebler » 20 апр 2014, 23:37

Foenix писал(а):Нажимаешь кнопку с домиком (зависит от прошивки), держишь ее, попадаешь в список задач и там жмешь на свою - попадаешь в то место, откуда ушел.
Да, вот этого как раз и хотел избежать. Иначе теряется ощущение работы в одном и том же приложении. Спасибо.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Foenix » 20 апр 2014, 23:48

не получится. Тогда свой браузер встраивай если тебе допустим нужно всего 1страничку показать.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Zulin
Сообщения: 2
Зарегистрирован: 23 май 2014, 18:20

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Zulin » 23 май 2014, 18:52

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 при выборе девайса.

Alexpol
Сообщения: 3
Зарегистрирован: 26 июн 2014, 20:21

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Alexpol » 17 июл 2014, 21:02

У меня в последней загруженной версии Эклипса нет выбора АВД (см. файл AVD.jpg)
Пытаюсь сделать выбор устройства тут (см. файл case.jpg).
Но с картой Гугл номер не проходит.
Поэтому сайт показал, экран набора телефона увидел. А вот с картой проблема.

З.Ы.
В этой версии и СДК менеджер - это отдельный файл.
Вложения
case.jpg
case.jpg (84.45 КБ) 15417 просмотров
AVD.jpg
AVD.jpg (68.54 КБ) 15417 просмотров

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение dimitrius » 21 авг 2014, 14:50

Добрый день а можно инструкция по установке приложения Google Maps. Или подскажите как открывать ссылки в pdf книге Startandroid (слова бирюзового цвета с подчеркиванием) а то они не работают. Вообще не понятно что они должны делать. Открытие ссылок стало проблемой именно на этом уроке...

Alexpol
Сообщения: 3
Зарегистрирован: 26 июн 2014, 20:21

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Alexpol » 23 авг 2014, 10:58

dimitrius писал(а):Открытие ссылок стало проблемой именно на этом уроке...
Да. именно на этом уроке я застопорился тоже. Тоже не работает только карта.
Нужно более подробное описание действий. Да, ссылка на инструкцию в уроке есть. Но текст по этой ссылке очень "относительный". А для начинающего нужно чуть больше разжевать (ИМХО).

zqwadrat
Сообщения: 2
Зарегистрирован: 18 сен 2014, 23:35

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение zqwadrat » 23 сен 2014, 15:09

не работает MAP (

При нажатии на кнопку MAP появляется "Unfortunately ,P0311_Simplentents has stopped"

Google APIs - в SDK установлено ,пробывал разные версии Android но в эмуляторе почему то нету карт ?

Alexpol
Сообщения: 3
Зарегистрирован: 26 июн 2014, 20:21

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Alexpol » 23 сен 2014, 18:46

Уважаемый автор уроков.
Количество учеников с неработающей кнопкой МАР увеличивается с каждым днём!
Понятно, что проект не коммерческий. Но всё же?
Мы очень хотим освоить Андроид! Но одно не понятое место полностью стопорит процесс обучения.
Огромная просьба уделить немного внимания своим ученикам.

З.Ы. Надеюсь, что проект не заброшен.

Razor
Сообщения: 10
Зарегистрирован: 13 окт 2014, 13:58

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Razor » 16 окт 2014, 11:24

Также в файле манифеста приложения, на вкладке Permission добавьте элемент Uses Permission и справа в поле Name выберите android.permission.INTERNET. Это даст приложению доступ в интернет. Правда у меня почему-то и без этого все работает … Пока не понял почему.
Приложению не требуется доступ в интернет, потому что его активити сами в интернет не ходят. :)

Surikesh
Сообщения: 1
Зарегистрирован: 08 дек 2014, 14:25

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение Surikesh » 04 янв 2015, 21:43

Код: Выделить всё

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>

asfdhagsdf
Сообщения: 1
Зарегистрирован: 07 фев 2015, 18:13

Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri

Сообщение asfdhagsdf » 07 фев 2015, 18:17

Из статьи...
...Правда у меня почему-то и без этого все работает … Пока не понял почему...
...я думаю, что приложение по сути само не требует доступа в интернет, а вызывает другую активность которая уже имеет такое право в манифесте)))

P.S. может кто-то ответил на этот вопрос, комментарии не читал)))

Ответить