Урок 27. Читаем action из Intent
Урок 27. Читаем action из Intent
В этом уроке:
- читаем action из Intent
Click here to read this article!
- читаем action из Intent
Click here to read this article!
Последний раз редактировалось damager82 20 июн 2017, 15:08, всего редактировалось 6 раз.
Re: Урок 27. Читаем action из Intent
У меня такой вопрос:
необходимо узнать названия всех установленных в системе программ, есть у кого какие варианты?
Предполагаю, что это можно сделать с помощью intent, а точнее у каждого приложения будет intent фильтр с параметром
android.intent.action.MAIN, остается только вопрос, как можно определить хотя бы количество установленных приложений, а затем в цикле можно было бы узнать все их названия?
Кто делал нечто подобное, буду рад помощи
необходимо узнать названия всех установленных в системе программ, есть у кого какие варианты?
Предполагаю, что это можно сделать с помощью intent, а точнее у каждого приложения будет intent фильтр с параметром
android.intent.action.MAIN, остается только вопрос, как можно определить хотя бы количество установленных приложений, а затем в цикле можно было бы узнать все их названия?
Кто делал нечто подобное, буду рад помощи
Re: Урок 27. Читаем action из Intent
Это можно сделать с помощью PackageManagerkudri писал(а):У меня такой вопрос:
необходимо узнать названия всех установленных в системе программ, есть у кого какие варианты?
Предполагаю, что это можно сделать с помощью intent, а точнее у каждого приложения будет intent фильтр с параметром
android.intent.action.MAIN, остается только вопрос, как можно определить хотя бы количество установленных приложений, а затем в цикле можно было бы узнать все их названия?
Кто делал нечто подобное, буду рад помощи
Re: Урок 27. Читаем action из Intent
Здравствуйте.
В последней части урока, по нажатию кнопки Show Date должно выводиться 3 варианта: Date Basic, Date Extended, Data/Time Info.
Но у меня вместо Date Basic, Date Extended выводится имя проекта P0261_..., несмотря на то, что в P0261 в активити label прописано Date Basic и Date Extended.
В последней части урока, по нажатию кнопки Show Date должно выводиться 3 варианта: Date Basic, Date Extended, Data/Time Info.
Но у меня вместо Date Basic, Date Extended выводится имя проекта P0261_..., несмотря на то, что в P0261 в активити label прописано Date Basic и Date Extended.
Re: Урок 27. Читаем action из Intent
Здравствуйте!
У меня при нажатии на 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()
У меня при нажатии на 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()
-
- Сообщения: 1
- Зарегистрирован: 30 дек 2013, 13:54
Re: Урок 27. Читаем action из Intent
Добрый день. Отличные уроки. Скажите пожалуйста как учесть timezone при выводе значения времени?
Re: Урок 27. Читаем action из Intent
В уроке в тексте последнего кода нужно заменить , на ; в строке String format = "", textInfo = "";
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 27. Читаем action из Intent
Всё в порядке. Ничего менять не стоит. Это определение двух переменных класса String, которое выполняется через запятую.
Re: Урок 27. Читаем action из Intent
m090050, спасибо! как-то этот вариант я упустила )))
Re: Урок 27. Читаем action из Intent
А можно где-нибудь узнать action фильтров приложений, установленных на андроид-устройствах? Например Галереи или почты?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 27. Читаем action из Intent
Добрый день.
В 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]
В 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]
-
- Сообщения: 1
- Зарегистрирован: 30 дек 2014, 12:09
Re: Урок 27. Читаем action из Intent
Здравствуйте. Подскажите пожалуйста, а могу ли я как-нибудь предотвратить запуск intent.action из браузера?
Объясню:
Делаю хотспот (бесплатный wifi с авторизацией через соцсети). И при попытке войти например через facebook (<a href='ttps://www.facebook.com/dialog/oauth.....'>) - получаю следующую проблему: пользователю предлагается через что открыть ссылку через приложение (если оно установлено) или через браузер. Мне нужно, чтобы эта ссылка всегда открывалась через браузер, т.к. иначе я не смогу авторизовать пользователя.
Может можно в ссылке указать data-* атрибут, или какой-нибудь meta тег в заголовке страницы.
Объясню:
Делаю хотспот (бесплатный wifi с авторизацией через соцсети). И при попытке войти например через facebook (<a href='ttps://www.facebook.com/dialog/oauth.....'>) - получаю следующую проблему: пользователю предлагается через что открыть ссылку через приложение (если оно установлено) или через браузер. Мне нужно, чтобы эта ссылка всегда открывалась через браузер, т.к. иначе я не смогу авторизовать пользователя.
Может можно в ссылке указать data-* атрибут, или какой-нибудь meta тег в заголовке страницы.
Re: Урок 27. Читаем action из Intent
не совсем понятно что именно ты делаешь.
Если у приложения есть интерфейс, то тут стандартный вариант webview, отлов пришедших ответов от фейсбука и прочего.
Если у приложения есть интерфейс, то тут стандартный вариант webview, отлов пришедших ответов от фейсбука и прочего.
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: Урок 27. Читаем action из Intent
А можно привести полный код AndriodManifest.xml по этому уроку? просто в android studio нет визуального редактора, по предыдущим урокам я вроде как разобрался с манифестом и ручками писал, а тут какой то затык и не взлетает (
Re: Урок 27. Читаем action из Intent
все, разобрался, оказывается каждый фильтр должен быть описан отдельно, а я пытался все засунуть в один, вот правильный код
<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>
<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>
Re: Урок 27. Читаем action из Intent
Так оно и нужно в один фильтр все засунуть. По крайней мере я так поняла из урока. Вот мой манифест, все работает: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>
Re: Урок 27. Читаем action из Intent
мені прийшлось все таки чучуть по-іншому записати:
<?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 попереднього уроку
<?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 попереднього уроку
-
- Сообщения: 1
- Зарегистрирован: 26 окт 2015, 21:41
Re: Урок 27. Читаем action из Intent
Ответ на вопрос пользователя "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)
Надеюсь смог помочь
День добрый и вам
Постараюсь ответить на ваш вопрос в свете личного понимания.
Поскольку при разработке мы используем синтаксис языка 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)
Надеюсь смог помочь
Re: Урок 27. Читаем action из Intent
action - это объект класса String. Когда мы пишем строку Java автоматически создает объект String. Т.к. это объекты то код сравнения через == будет всегда ложь, т.к. при сравнении будут определяться id объектов, а они разные будут всегда. Это легко проверить, создав 2 переменные String с одинаковым значением.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]
Поэтому, для сравнения используется этот метод