Урок 31. Зачем у Intent есть атрибут data. Что такое Uri. Вызываем системные приложения
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
НЕ подскажите как вызвать просмотр файлов(желательно картинок) для того чтобы выбрать картинку и получить к ней адресс?
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
IntentFilter тебе в помощь.samarjan писал(а):НЕ подскажите как вызвать просмотр файлов(желательно картинок) для того чтобы выбрать картинку и получить к ней адресс?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Просто дьявольски помогrezak90 писал(а):IntentFilter тебе в помощь.
Файл можно открыть так:
Код: Выделить всё
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, 0);
Код: Выделить всё
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data!=null){
String path = data.getData().getPath();
// Делаем что-то с файлом...
}
}
То ли интент надо как-то по другому оформлять, то ли результат обрабатывать по другому.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Действительно по другому обрабатывать.
Как-то так:
Естественно, для картинок, в intent.setType нужно передать "image/*"
PS: Все так сложно... Если углубляться в тему, хватит еще, минимум, на пару уроков.
Как-то так:
Код: Выделить всё
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
PS: Все так сложно... Если углубляться в тему, хватит еще, минимум, на пару уроков.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Есть вроде готовые решения http://russenreaktor.wordpress.com/2010 ... ery-image/
managedQuery() устаревший, есть другое решение для нахождения пути к картинке по URI
private String getRealPathFromURI(Uri contentURI) {
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
Но тут одна тонкость, все это работает когда пользователь использует "Галерею" для выбора картинки, но реально в списке приложений, предложенном системой, могут присутствовать и файлменеджеры, которые также обрабатывают “image/*” но они возвращают путь и не факт, что пользователь всегда будет выбирать галерею.
Т.е. нужно предусмотреть проверку содержимого возвращаемого URI, либо как-то ограничить chooser только галереей.
Да и курсор нужно явно закрывать после использования (во всяком случае так пишут в доках).
В общем, код предложенный по ссылке требует доработки.
managedQuery() устаревший, есть другое решение для нахождения пути к картинке по URI
private String getRealPathFromURI(Uri contentURI) {
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
Но тут одна тонкость, все это работает когда пользователь использует "Галерею" для выбора картинки, но реально в списке приложений, предложенном системой, могут присутствовать и файлменеджеры, которые также обрабатывают “image/*” но они возвращают путь и не факт, что пользователь всегда будет выбирать галерею.
Т.е. нужно предусмотреть проверку содержимого возвращаемого URI, либо как-то ограничить chooser только галереей.
Да и курсор нужно явно закрывать после использования (во всяком случае так пишут в доках).
В общем, код предложенный по ссылке требует доработки.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Здравствуйте,
Например: есть стандартный браузер, который имеет расширенный функционал, состоящий из нескольких Activity. На основе примера в 32-ом уроке я хочу написать свой вариант браузера, в котором я хочу использовать только одну функцию стандартного браузера, для которой уже есть своя Activity. Как это сделать?
Что можно почитать (кроме developers guide), чтобы лучше понять как осуществляется доступ к системным приложениям в Android.
Хотелось бы прояснить в части, связанной с системными приложениями. Используя атрибут action для совершения какого-то действия над объектом и, посредством data, указывая на объект (и его вид), над которым нужно произвести это действие, мы вызываем конкретное Activity, которое может произвести это действие или вызываем непосредственно системное приложение, у которого кроме этого Activity есть еще много других, но в данном конкретном случае не нужных?если попытаться описать словами наш код, то получится так: этот Intent означает, что мы хотим посмотреть содержимое этой ссылки и ищем Activity, которая могла бы нам помочь.
Например: есть стандартный браузер, который имеет расширенный функционал, состоящий из нескольких Activity. На основе примера в 32-ом уроке я хочу написать свой вариант браузера, в котором я хочу использовать только одну функцию стандартного браузера, для которой уже есть своя Activity. Как это сделать?
Что можно почитать (кроме developers guide), чтобы лучше понять как осуществляется доступ к системным приложениям в Android.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Здравствуйте,
можно ли в Android создавать новый Java класс, который будет являться подклассом MainActivity.
public class MyJavaClass extends MainActivity
Если да, то какие пакеты импортируются, и есть ли какие-либо нюансы этого дела.
Спасибо.
можно ли в Android создавать новый Java класс, который будет являться подклассом MainActivity.
public class MyJavaClass extends MainActivity
Если да, то какие пакеты импортируются, и есть ли какие-либо нюансы этого дела.
Спасибо.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Можно. Например в MainActivity прописываете какой-то функционал, общий для всех Activity, и все следующие Activity делаете наследниками, чтобы не писать одно и то же несколько раз. Нюансов вроде как нет особых.dil_android писал(а):можно ли в Android создавать новый Java класс, который будет являться подклассом MainActivity.
public class MyJavaClass extends MainActivity
Если да, то какие пакеты импортируются, и есть ли какие-либо нюансы этого дела.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Фильтры с action и data прописаны для Activity. Соответственно, вызывается именно Activity, а не все приложение.dil_android писал(а):Используя атрибут action для совершения какого-то действия над объектом и, посредством data, указывая на объект (и его вид), над которым нужно произвести это действие, мы вызываем конкретное Activity, которое может произвести это действие или вызываем непосредственно системное приложение, у которого кроме этого Activity есть еще много других, но в данном конкретном случае не нужных?
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Спасибо большое за разъяснение.
Чтобы закрыть тему и двигаться дальше, хочу спросить: получается, что вызов конкретного Activity для совершения действия над объектом осуществляется только при помощи Intent (data)? Не сужает ли это возможности оперирования собственными и чужими Activity?
Чтобы закрыть тему и двигаться дальше, хочу спросить: получается, что вызов конкретного Activity для совершения действия над объектом осуществляется только при помощи Intent (data)? Не сужает ли это возможности оперирования собственными и чужими Activity?
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
А каких возможностей оперирования не хватает в текущей парадигме?dil_android писал(а):Не сужает ли это возможности оперирования собственными и чужими Activity?
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Насколько я понял "в качестве дата мы подаем объект Uri", т.е. все Активити работают только с тем типом данных, который описывается Uri. Я не специалист, но прочитав про Uri в Wiki задался вопросом: включает ли Uri описание абсолютно всех типов данных?
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Intent, позволяя обращаться к собственным или чужим Activity для решения задач с определенным типом данных, не позволяет вам каким либо образом модифицировать Activity, или любым другим образом воздействовать на него. Так ли это? Есть ли у Androida соответствующий функционал, и если да, то можно пример.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Не позволяет. Также и в программировании. Вы не можете изменить вызываемый метод. Только что-то передать на вход и получить результат.dil_android писал(а):Intent, позволяя обращаться к собственным или чужим Activity для решения задач с определенным типом данных, не позволяет вам каким либо образом модифицировать Activity, или любым другим образом воздействовать на него. Так ли это? Есть ли у Androida соответствующий функционал, и если да, то можно пример.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Понял, спасибо.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Как сделать чтобы сразу шел вызов номера?
Не работает, почему?
Помогите плз.
Код: Выделить всё
public void onClick(View v) {
Intent intent;
switch (v.getId()) {
case R.id.btnCall:
intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:+7123456"));
startActivity(intent);
break;
}
Помогите плз.
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
В файле манифеста приложения, на вкладке Permission добавьте элемент Uses Permission и справа в поле Name выберите:ipona писал(а):Как сделать чтобы сразу шел вызов номера?
android.permission.CALL_PHONE
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Большое спасибо! Работает как надо!
-
- Сообщения: 1
- Зарегистрирован: 15 окт 2012, 15:32
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
стандартный try-catch:damager82 писал(а):А вот интересно, что будет если не окажется ни одного обработчика? приложение с грохотом упадёт? Как это лучше обрабатывать?
Код: Выделить всё
try {
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:55.754283,37.62002"));
startActivity(intent);
} catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), 0).show();
}
Re: Урок 31. Зачем у Intent есть атрибут data. Что такое Uri
Здравствуйте,
У меня не работает интернет в эмуляторе, как в браузере, так и в приложении этого урока. Как можно это настроить? Может это связано с тем, что у меня 2 сетевые карты? На всякий случай прилагаю логи, там есть сообщение "нажата кнопка web", после которой ничего не работает. Пожалуйста помогите, я новичок во всем этом. Антивирус предварительно отключил. Поиск в интернетах ответа не дал.
10-20 14:23:22.551: D/myLogs(376): Нажата кнопка WEB
10-20 14:23:22.560: I/ActivityManager(62): Starting: Intent { act=android.intent.action.VIEW dat=http://developer.android.com cmp=com.android.browser/.BrowserActivity } from pid 376
10-20 14:23:22.660: I/ActivityManager(62): Start proc com.android.browser for activity com.android.browser/.BrowserActivity: pid=385 uid=10033 gids={3003, 1015}
10-20 14:23:23.120: I/ActivityThread(385): Pub browser: com.android.browser.BrowserProvider
10-20 14:23:23.250: I/BrowserSettings(385): Selected search engine: ActivitySearchEngine{android.app.SearchableInfo@40598538}
10-20 14:23:23.551: D/dalvikvm(385): GC_CONCURRENT freed 449K, 50% free 2919K/5831K, external 766K/1038K, paused 4ms+4ms
10-20 14:23:23.981: I/ActivityManager(62): Displayed com.android.browser/.BrowserActivity: +1s328ms
10-20 14:23:31.960: E/CheckinTask(203): Checkin failed: https://android.clients.google.com/checkin (request #0)
10-20 14:23:31.960: E/CheckinTask(203): java.net.UnknownHostException: android.clients.google.com
10-20 14:23:31.960: E/CheckinTask(203): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
10-20 14:23:31.960: E/CheckinTask(203): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
10-20 14:23:31.960: E/CheckinTask(203): at java.net.InetAddress.getAllByName(InetAddress.java:256)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-20 14:23:31.960: E/CheckinTask(203): at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:248)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.common.http.GoogleHttpClient.executeWithoutRewriting(GoogleHttpClient.java:203)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:245)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:313)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinTask.sendRequest(CheckinTask.java:254)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinTask.doInBackground(CheckinTask.java:150)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:221)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:214)
10-20 14:23:31.960: E/CheckinTask(203): at android.os.AsyncTask$2.call(AsyncTask.java:185)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
10-20 14:23:31.960: E/CheckinTask(203): at java.lang.Thread.run(Thread.java:1019)
10-20 14:23:32.140: D/dalvikvm(203): GC_CONCURRENT freed 578K, 51% free 2984K/6023K, external 716K/1038K, paused 4ms+5ms
10-20 14:23:44.860: E/Tab(385): onReceivedError -2 http://developer.android.com/ Не удалось найти URL.
10-20 14:24:56.700: W/KeyCharacterMap(385): No keyboard for id 0
10-20 14:24:56.700: W/KeyCharacterMap(385): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
10-20 14:24:56.841: W/InputManagerService(62): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@40637608 (uid=10033 pid=385)
10-20 14:24:57.140: D/webviewglue(385): nativeDestroy view: 0x294ec8
10-20 14:25:05.130: D/dalvikvm(385): GC_EXPLICIT freed 225K, 49% free 3014K/5831K, external 948K/1038K, paused 49ms
: E/(): Device disconnected
У меня не работает интернет в эмуляторе, как в браузере, так и в приложении этого урока. Как можно это настроить? Может это связано с тем, что у меня 2 сетевые карты? На всякий случай прилагаю логи, там есть сообщение "нажата кнопка web", после которой ничего не работает. Пожалуйста помогите, я новичок во всем этом. Антивирус предварительно отключил. Поиск в интернетах ответа не дал.
10-20 14:23:22.551: D/myLogs(376): Нажата кнопка WEB
10-20 14:23:22.560: I/ActivityManager(62): Starting: Intent { act=android.intent.action.VIEW dat=http://developer.android.com cmp=com.android.browser/.BrowserActivity } from pid 376
10-20 14:23:22.660: I/ActivityManager(62): Start proc com.android.browser for activity com.android.browser/.BrowserActivity: pid=385 uid=10033 gids={3003, 1015}
10-20 14:23:23.120: I/ActivityThread(385): Pub browser: com.android.browser.BrowserProvider
10-20 14:23:23.250: I/BrowserSettings(385): Selected search engine: ActivitySearchEngine{android.app.SearchableInfo@40598538}
10-20 14:23:23.551: D/dalvikvm(385): GC_CONCURRENT freed 449K, 50% free 2919K/5831K, external 766K/1038K, paused 4ms+4ms
10-20 14:23:23.981: I/ActivityManager(62): Displayed com.android.browser/.BrowserActivity: +1s328ms
10-20 14:23:31.960: E/CheckinTask(203): Checkin failed: https://android.clients.google.com/checkin (request #0)
10-20 14:23:31.960: E/CheckinTask(203): java.net.UnknownHostException: android.clients.google.com
10-20 14:23:31.960: E/CheckinTask(203): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
10-20 14:23:31.960: E/CheckinTask(203): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
10-20 14:23:31.960: E/CheckinTask(203): at java.net.InetAddress.getAllByName(InetAddress.java:256)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-20 14:23:31.960: E/CheckinTask(203): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-20 14:23:31.960: E/CheckinTask(203): at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:248)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.common.http.GoogleHttpClient.executeWithoutRewriting(GoogleHttpClient.java:203)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:245)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:313)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinTask.sendRequest(CheckinTask.java:254)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinTask.doInBackground(CheckinTask.java:150)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:221)
10-20 14:23:31.960: E/CheckinTask(203): at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:214)
10-20 14:23:31.960: E/CheckinTask(203): at android.os.AsyncTask$2.call(AsyncTask.java:185)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-20 14:23:31.960: E/CheckinTask(203): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
10-20 14:23:31.960: E/CheckinTask(203): at java.lang.Thread.run(Thread.java:1019)
10-20 14:23:32.140: D/dalvikvm(203): GC_CONCURRENT freed 578K, 51% free 2984K/6023K, external 716K/1038K, paused 4ms+5ms
10-20 14:23:44.860: E/Tab(385): onReceivedError -2 http://developer.android.com/ Не удалось найти URL.
10-20 14:24:56.700: W/KeyCharacterMap(385): No keyboard for id 0
10-20 14:24:56.700: W/KeyCharacterMap(385): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
10-20 14:24:56.841: W/InputManagerService(62): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@40637608 (uid=10033 pid=385)
10-20 14:24:57.140: D/webviewglue(385): nativeDestroy view: 0x294ec8
10-20 14:25:05.130: D/dalvikvm(385): GC_EXPLICIT freed 225K, 49% free 3014K/5831K, external 948K/1038K, paused 49ms
: E/(): Device disconnected