Урок 27. Читаем action из Intent

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 27. Читаем action из Intent

Сообщение damager82 » 23 окт 2011, 20:00

В этом уроке:
- читаем action из Intent


Click here to read this article!
Последний раз редактировалось damager82 20 июн 2017, 15:08, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

kudri
Сообщения: 5
Зарегистрирован: 01 окт 2012, 16:05

Re: Урок 27. Читаем action из Intent

Сообщение kudri » 13 окт 2012, 13:53

У меня такой вопрос:
необходимо узнать названия всех установленных в системе программ, есть у кого какие варианты?
Предполагаю, что это можно сделать с помощью intent, а точнее у каждого приложения будет intent фильтр с параметром
android.intent.action.MAIN, остается только вопрос, как можно определить хотя бы количество установленных приложений, а затем в цикле можно было бы узнать все их названия?
Кто делал нечто подобное, буду рад помощи

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 27. Читаем action из Intent

Сообщение AndreyI » 13 окт 2012, 14:34

kudri писал(а):У меня такой вопрос:
необходимо узнать названия всех установленных в системе программ, есть у кого какие варианты?
Предполагаю, что это можно сделать с помощью intent, а точнее у каждого приложения будет intent фильтр с параметром
android.intent.action.MAIN, остается только вопрос, как можно определить хотя бы количество установленных приложений, а затем в цикле можно было бы узнать все их названия?
Кто делал нечто подобное, буду рад помощи
Это можно сделать с помощью PackageManager

demaunt
Сообщения: 2
Зарегистрирован: 08 окт 2013, 19:46

Re: Урок 27. Читаем action из Intent

Сообщение demaunt » 25 окт 2013, 19:53

Здравствуйте.
В последней части урока, по нажатию кнопки Show Date должно выводиться 3 варианта: Date Basic, Date Extended, Data/Time Info.
Но у меня вместо Date Basic, Date Extended выводится имя проекта P0261_..., несмотря на то, что в P0261 в активити label прописано Date Basic и Date Extended.

Bestlis
Сообщения: 2
Зарегистрирован: 28 ноя 2013, 15:28

Re: Урок 27. Читаем action из Intent

Сообщение Bestlis » 28 ноя 2013, 15:29

Здравствуйте!

У меня при нажатии на Date/Time Info вбрасывается необработанное исключение:
11-28 12:29:05.097: E/AndroidRuntime(339): FATAL EXCEPTION: main
11-28 12:29:05.097: E/AndroidRuntime(339): java.lang.RuntimeException: Unable to start activity ComponentInfo{ua.bestlis.p0271_getintentaction/ua.bestlis.p0271_getintentaction.Info}: java.lang.NullPointerException
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.os.Looper.loop(Looper.java:123)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-28 12:29:05.097: E/AndroidRuntime(339): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 12:29:05.097: E/AndroidRuntime(339): at java.lang.reflect.Method.invoke(Method.java:507)
11-28 12:29:05.097: E/AndroidRuntime(339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-28 12:29:05.097: E/AndroidRuntime(339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-28 12:29:05.097: E/AndroidRuntime(339): at dalvik.system.NativeStart.main(Native Method)
11-28 12:29:05.097: E/AndroidRuntime(339): Caused by: java.lang.NullPointerException
11-28 12:29:05.097: E/AndroidRuntime(339): at ua.bestlis.p0271_getintentaction.Info.onCreate(Info.java:41)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-28 12:29:05.097: E/AndroidRuntime(339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
11-28 12:29:05.097: E/AndroidRuntime(339): ... 11 more

Всё!
Разобрался!!!
Затупил немного, не то view показывал в onCreate()

CoMoVAIvoce
Сообщения: 1
Зарегистрирован: 30 дек 2013, 13:54

Re: Урок 27. Читаем action из Intent

Сообщение CoMoVAIvoce » 30 дек 2013, 13:56

Добрый день. Отличные уроки. Скажите пожалуйста как учесть timezone при выводе значения времени?

Аватара пользователя
MASK
Сообщения: 4
Зарегистрирован: 09 янв 2014, 09:15

Re: Урок 27. Читаем action из Intent

Сообщение MASK » 15 янв 2014, 11:15

В уроке в тексте последнего кода нужно заменить , на ; в строке String format = "", textInfo = "";

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 27. Читаем action из Intent

Сообщение Mikhail_dev » 15 янв 2014, 13:23

Всё в порядке. Ничего менять не стоит. Это определение двух переменных класса String, которое выполняется через запятую.

Аватара пользователя
MASK
Сообщения: 4
Зарегистрирован: 09 янв 2014, 09:15

Re: Урок 27. Читаем action из Intent

Сообщение MASK » 15 янв 2014, 14:58

m090050, спасибо! как-то этот вариант я упустила )))

Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

Re: Урок 27. Читаем action из Intent

Сообщение Realist » 10 мар 2014, 20:38

А можно где-нибудь узнать action фильтров приложений, установленных на андроид-устройствах? Например Галереи или почты?


compl
Сообщения: 1
Зарегистрирован: 01 июл 2014, 18:19

Re: Урок 27. Читаем action из Intent

Сообщение compl » 06 июл 2014, 19:06

Добрый день.
В info.java, где мы по определенному action заполняем переменные, используется метод equals. Читал в разных источниках про него, но везде написано разное. Объясните пожалуйста, в чем отличие этого метода от "=="? Т.к. в коде заменил этот метод на сравнение "==", и ничего не изменилось.

[syntax=java]// в зависимости от action заполняем переменные
/*if (action.equals("com.hangover.intent.action.showtime")) {
format = "HH:mm:ss";
textInfo = "Time: ";
}*/
if (action=="com.hangover.intent.action.showtime") {
format = "HH:mm:ss";
textInfo = "Time: ";
}
else if (action.equals("com.hangover.intent.action.showdate")) {
format = "dd.MM.yyyy";
textInfo = "Date: ";
}[/syntax]

peektoseen
Сообщения: 1
Зарегистрирован: 30 дек 2014, 12:09

Re: Урок 27. Читаем action из Intent

Сообщение peektoseen » 30 дек 2014, 12:16

Здравствуйте. Подскажите пожалуйста, а могу ли я как-нибудь предотвратить запуск intent.action из браузера?
Объясню:
Делаю хотспот (бесплатный wifi с авторизацией через соцсети). И при попытке войти например через facebook (<a href='ttps://www.facebook.com/dialog/oauth.....'>) - получаю следующую проблему: пользователю предлагается через что открыть ссылку через приложение (если оно установлено) или через браузер. Мне нужно, чтобы эта ссылка всегда открывалась через браузер, т.к. иначе я не смогу авторизовать пользователя.
Может можно в ссылке указать data-* атрибут, или какой-нибудь meta тег в заголовке страницы.

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

Re: Урок 27. Читаем action из Intent

Сообщение Foenix » 30 дек 2014, 13:04

не совсем понятно что именно ты делаешь.
Если у приложения есть интерфейс, то тут стандартный вариант webview, отлов пришедших ответов от фейсбука и прочего.
R.id.team

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

HamyaG
Сообщения: 2
Зарегистрирован: 03 янв 2015, 13:39

Re: Урок 27. Читаем action из Intent

Сообщение HamyaG » 18 янв 2015, 20:16

А можно привести полный код AndriodManifest.xml по этому уроку? просто в android studio нет визуального редактора, по предыдущим урокам я вроде как разобрался с манифестом и ручками писал, а тут какой то затык и не взлетает (

HamyaG
Сообщения: 2
Зарегистрирован: 03 янв 2015, 13:39

Re: Урок 27. Читаем action из Intent

Сообщение HamyaG » 20 янв 2015, 08:22

все, разобрался, оказывается каждый фильтр должен быть описан отдельно, а я пытался все засунуть в один, вот правильный код
<activity android:name=".info"
android:theme="@style/Base.Theme.AppCompat.Dialog"
android:label="info">
<intent-filter>

<action android:name="showdate"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="showtime"/>

<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

yanina_is
Сообщения: 1
Зарегистрирован: 07 фев 2015, 22:00

Re: Урок 27. Читаем action из Intent

Сообщение yanina_is » 14 фев 2015, 12:08

HamyaG писал(а):все, разобрался, оказывается каждый фильтр должен быть описан отдельно, а я пытался все засунуть в один, вот правильный код
Так оно и нужно в один фильтр все засунуть. По крайней мере я так поняла из урока. Вот мой манифест, все работает:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yanina_is.p027" >

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<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>
<activity android:name="Info" android:label="Date/timeInfo">
<intent-filter>
<action android:name="ru.startandroid.intent.action.showdate"/>
<action android:name="ru.startandroid.intent.action.showtime"/>
<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>
</activity>
</application>

</manifest>

dstu4145
Сообщения: 1
Зарегистрирован: 15 май 2015, 12:00

Re: Урок 27. Читаем action из Intent

Сообщение dstu4145 » 15 май 2015, 12:06

мені прийшлось все таки чучуть по-іншому записати:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.admin.p0271_getintentaction" >

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<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>

<activity
android:name="Info"
android:label="Date/time info" >
<intent-filter>
<action android:name="com.example.intent.action.showtime" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

<intent-filter>
<action android:name="com.example.intent.action.showdate" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

</activity>
</application>

</manifest>

так як просто прописати наступний код не достатньо в моїй ситуації:

<activity
android:name="Info"
android:label="Date/time info" >
<intent-filter>
<action android:name="com.example.intent.action.showtime" />
<action android:name="com.example.intent.action.showdate" />
<category android:name="android.intent.category.DEFAULT" />




</intent-filter>
</activity>


не виводить повідомлення про можливість вибору з інших action попереднього уроку

Tinky-Winky
Сообщения: 1
Зарегистрирован: 26 окт 2015, 21:41

Re: Урок 27. Читаем action из Intent

Сообщение Tinky-Winky » 26 окт 2015, 22:43

Ответ на вопрос пользователя "compl"

День добрый и вам
Постараюсь ответить на ваш вопрос в свете личного понимания.
Поскольку при разработке мы используем синтаксис языка java(для файлов nameApp.java),то и базовые понятия должны соответствовать этому синтаксису.

Не много теории.

equals это - операция сравнения содержимого соответствующих переменным областям памяти

== это - операция сравнения ссылок.

В чём разница?

метод equals(Object) класса java.lang.Object
сравнивает содержимое двух областей памяти

== операция сравнения двух ссылок на объекты. Т.е. эта операция вернет true тогда и только тогда, когда содержимое совпадает, что означает, что переменные указывают на ОДИН И ТОТ ЖЕ объект.

Что касается вашего случая то здесь есть маленький нюанс.
Одинаковые строки на самом деле являются единственным объектом. В чем легко убедиться, выполнив следующий код:
[syntax=java]
String str1 = "string";
String str2 = "string";
System.out.println(str1==str2 ? "the same" : "not the same");
[/syntax]

Результатом будет "the same". Что означает, что ссылки на строки равны. Это сделано на уровне компилятора, очевидно, для экономии памяти. Компилятор создает ОДИН экземпляр строки, и присваивает str1 и str2 ссылку на этот экземпляр.

Однако, это относится только к строкам, объявленным как литералы, в коде. Если скомпоновать строку из кусков, ссылка на нее будет другой. Подтверждение – данный пример:

[syntax=java]
String str1 = "string";
String str2 = "str";
String str3 = "ing";
System.out.println(str1==(str2+str3) ? "the same" : "not the same");
[/syntax]
Результатом будет "not the same". Также можно создать новый объект с помощью копирующего конструктора:

[syntax=java] String str1 = "string";
String str2 = new String("string");
System.out.println(str1==str2 ? "the same" : "not the same");
[/syntax]
Результатом также будет "not the same".

Таким образом, иногда строки можно сравнивать и через сравнение ссылок. Но на это лучше не полагаться.
При объяснении использованы материалы из сайта(http://www.skipy.ru)

Надеюсь смог помочь

WKBAPKA
Сообщения: 32
Зарегистрирован: 03 янв 2014, 14:28

Re: Урок 27. Читаем action из Intent

Сообщение WKBAPKA » 25 авг 2017, 15:04

compl писал(а):Добрый день.
В info.java, где мы по определенному action заполняем переменные, используется метод equals. Читал в разных источниках про него, но везде написано разное. Объясните пожалуйста, в чем отличие этого метода от "=="? Т.к. в коде заменил этот метод на сравнение "==", и ничего не изменилось.

[syntax=java]// в зависимости от action заполняем переменные
/*if (action.equals("com.hangover.intent.action.showtime")) {
format = "HH:mm:ss";
textInfo = "Time: ";
}*/
if (action=="com.hangover.intent.action.showtime") {
format = "HH:mm:ss";
textInfo = "Time: ";
}
else if (action.equals("com.hangover.intent.action.showdate")) {
format = "dd.MM.yyyy";
textInfo = "Date: ";
}[/syntax]
action - это объект класса String. Когда мы пишем строку Java автоматически создает объект String. Т.к. это объекты то код сравнения через == будет всегда ложь, т.к. при сравнении будут определяться id объектов, а они разные будут всегда. Это легко проверить, создав 2 переменные String с одинаковым значением.
Поэтому, для сравнения используется этот метод

Ответить