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

Обсуждение уроков
Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 03 апр 2013, 12:26

ActivityNotFoundException говорит о том что активити не добавлена в манифест. Добавте в манифест активи
R.id.team
Политика на форуме запрещена

Logos
Сообщения: 3
Зарегистрирован: 03 апр 2013, 11:09

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

Сообщение Logos » 03 апр 2013, 13:06

Оно же по умолчанию создается о_О... по крайней мере я ставил галочку создать activity. Вообщем, добавил и получилась такая картина:

Изображение
package ru.startandroid.develop.p0311simpleintents;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements 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;
}
}
}

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 03 апр 2013, 13:35

Нет, я думал у вас активити своя стартуется, так что с манифеста уберите то что вы добавили. Думается мне что вы выбрали апи андроид, а нужно апи с поддержкой гугл сервисов.
R.id.team
Политика на форуме запрещена

Logos
Сообщения: 3
Зарегистрирован: 03 апр 2013, 11:09

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

Сообщение Logos » 03 апр 2013, 14:13

rezak90 писал(а):Нет, я думал у вас активити своя стартуется, так что с манифеста уберите то что вы добавили. Думается мне что вы выбрали апи андроид, а нужно апи с поддержкой гугл сервисов.
Спасибо позже, дома уже попробую (т.к. на работе). Результаты отпишу.

Sanuch89
Сообщения: 2
Зарегистрирован: 06 апр 2013, 17:18

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

Сообщение Sanuch89 » 06 апр 2013, 18:09

Ребята, прошу помощи.
Эмулятор не получает доступ к интернету. При чём даже стандартный браузер не грузит страницы.
В эмуляторе android 4.0 интернет работает, а в android 2.3.3 нет.
Может кто-то сталкивался с этой проблемой?

Андрей Андрюха
Сообщения: 1
Зарегистрирован: 27 май 2013, 14:33

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

Сообщение Андрей Андрюха » 27 май 2013, 14:40

Пишу несложный виджет. Подскажите, пожалуйста, как, скажем, при нажатии на кнопку открыть стандартный календарь и будильник?

Аватара пользователя
J.P.
Сообщения: 3
Зарегистрирован: 27 мар 2013, 21:55

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

Сообщение J.P. » 16 июн 2013, 12:11

При попытке запустить этот урок на моем Samsung Galaxy S2 4.1.2, Android Device Chooser выдает мне предупреждающий знак на мое устройство (желтый треугольник с восклицательным знаком). Приложение выполняется нормально. Выглядит это так:
Изображение.
Тот же знак, если пытаюсь запустить в AVD без GoogleAPI. Что это значит? Мое устройство не имеет GoogleAPI?

Norman
Сообщения: 5
Зарегистрирован: 24 июл 2013, 10:32

POST-запрос

Сообщение Norman » 24 июл 2013, 15:23

Uri строка может как-то получить атрибуты POST-запроса?

NeoSvet
Сообщения: 11
Зарегистрирован: 19 авг 2013, 20:21

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

Сообщение NeoSvet » 22 авг 2013, 20:40

Устал уже искать по интернету... неужели нельзя запустить файловый менеджер и открыть в нём определенную папку?..
Только 7zipper откликается если в setDataAndType указать неизвестный тип и предлагает открыть как файл или папку..)))

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

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

Сообщение klblk » 23 авг 2013, 06:16

NeoSvet писал(а):Устал уже искать по интернету... неужели нельзя запустить файловый менеджер и открыть в нём определенную папку?..
Только 7zipper откликается если в setDataAndType указать неизвестный тип и предлагает открыть как файл или папку..)))
Как-то так наверное:
[syntax=java]Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath().toString() + "/Download/"));
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(uri, "*/*");
startActivity(intent);[/syntax]

у меня предложил открыть "File Manager", "ASTRO fm", Галерею, ну и почему-то ему захотелось это открыть в Winampe и в Контактах (последний к слову падают с ошибкой)

Другой способ, можно найти конкретное приложение на устройстве и запустить через него. Например gmail у меня ищется както так:
[syntax=java]final PackageManager pm = getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
ResolveInfo best = null;
for (final ResolveInfo info : matches)
if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
best = info;
if (best != null) {
emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
startActivity(emailIntent);
}else{
//говорим юзеру, что данной программы нет
}[/syntax]

чую сейчас закидаю камнями=)

upd:
а вообще все было не так, а както так:
http://stackoverflow.com/questions/1716 ... -in-a-file
см зеленую галочку.

NeoSvet
Сообщения: 11
Зарегистрирован: 19 авг 2013, 20:21

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

Сообщение NeoSvet » 23 авг 2013, 12:11

klblk писал(а): у меня предложил открыть "File Manager", "ASTRO fm", Галерею, ну и почему-то ему захотелось это открыть в Winampe и в Контактах (последний к слову падают с ошибкой)
Чтобы не было лишнего, надо указать тип "file/*"

В итоге у меня получилось так:

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

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.fromFile(new File(path), "file/*");
startActivity(intent); 
Результат наиболее близкий к желаемому, но не совсем... Один файловый менеджер не запускается, а открывает диалоговое окно выбора папки.. другой просто запускается (в том числе стандартный) - т.е. не открывает мою папку. Но есть и тот, который делает как надо..)))

shatter
Сообщения: 1
Зарегистрирован: 06 окт 2013, 17:07

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

Сообщение shatter » 06 окт 2013, 17:09

При попытке в номер включить решетку(#) ничего не выходит не подскажите как добиться этого?

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

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

Сообщение Isaev » 15 окт 2013, 13:16

а почему при запросе поиска на карте zoom игнорируется? Они вместе никак не могут работать чтоли?

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

intent.setData(Uri.parse("geo:0,0,longitude?q=Москва, Красная площадь&z=2"));
тут читал

erioik
Сообщения: 1
Зарегистрирован: 24 окт 2013, 21:20

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

Сообщение erioik » 24 окт 2013, 21:24

Такой вопрос:
Нужно из класса, не являющегося Activity, вызвать системное приложение. В гугле нашел только как можно вызвать другое Activity.

Как это сделать?

Wanderer
Сообщения: 4
Зарегистрирован: 02 дек 2013, 18:22

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

Сообщение Wanderer » 02 дек 2013, 18:39

Здравствуйте.
Начинаю изучать программирование под Android и столкнулся с проблемой.
В ListView выводится список, который формируется занесением в БД имени и номера.
В каждом пункте списка реализовано отображение имени абонента и номера на который следует отправить смс. При нажатии на пункт списка открывается родной смс-менеджер с уже заданным шаблоном сообщения и номером отправки.
Суть проблемы: есть код

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

lvNames.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        	Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:123"));
        	smsIntent.putExtra("sms_body");
        	startActivity(smsIntent);
          Log.d("LOG_TAG", "itemClick: position = " + position + ", id = " + id);
        }
      });
"sms:123" - явно задается номер, на который будет отправлена смс.
Как сделать, что бы номер брался из БД т.е. тот, который отображается в нажатом пункте списка?

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

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

Сообщение Foenix » 02 дек 2013, 19:46

:) формируй переменную-строку и записывай ее в качестве параметра в parse
что-то уж совсем вопрос.. хм
R.id.team

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

Wanderer
Сообщения: 4
Зарегистрирован: 02 дек 2013, 18:22

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

Сообщение Wanderer » 02 дек 2013, 20:11

Спасибо конечно, но хотелось бы поподробнее. Всего-то 4й день этим всем занимаюсь =(

Прописываю:

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

...
TextView tvSPhn;
...
String number;
...
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        	number = tvSPhn.getText().toString();
        	Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" + number));
                smsIntent.putExtra("sms_body", "текс");
                startActivity(smsIntent);
...
tvSPhn это id вью, в которомы выводится номер телефона.
Приложение вываливается с ошибкой.
Подскажите как получить данные из поля БД - номер телефона

Wanderer
Сообщения: 4
Зарегистрирован: 02 дек 2013, 18:22

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

Сообщение Wanderer » 03 дек 2013, 19:58

Весь день долбался, так и не решил проблему.
Может кто подскажет?

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

// открываем подключение к БД 
db = new DB(this); 
db.open();

// формируем столбцы сопоставления
String[] from = new String[] { DB.COLUMN_IMG, DB.COLUMN_Name, DB.COLUMN_YPhn, DB.COLUMN_SPhn};
int[] to = new int[] { R.id.ivImg, R.id.tvName, R.id.tvYPhn, R.id.tvSPhn };

// создааем адаптер и настраиваем список
scAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0);
lvNames = (ListView) findViewById(R.id.lvNames);
lvNames.setAdapter(scAdapter);

lvNames.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
        Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" + SPhn ));
        smsIntent.putExtra("sms_body", "какой то текст" + YPhn );
        startActivity(smsIntent);

        Log.d("r/rwBD", "itemClick: position = " + position + ", id = " + id );
    }
});
В лог выводится позиция в списке и ID нажатого элемента в ListView.

Собственно вопрос: Как,зная ID, вывести в Uri.parse("sms:" + SPhn ) и smsIntent.putExtra("sms_body", "какой то текст" + YPhn ) вместо SPhn и YPhn соответствующие значения из БД? Кто может хотя бы намекнуть, куда копать? Я примерно понимаю что надо прописать STRING number = ???

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

 public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
       
STRING number = 

        Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" + SPhn ));
        smsIntent.putExtra("sms_body", "какой то текст" + YPhn );
        startActivity(smsIntent);

        Log.d("r/rwBD", "itemClick: position = " + position + ", id = " + id );
    }
и вместо SPhn и YPhn прописать number, но что присваивать переменной понятия не имею.

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

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

Сообщение Foenix » 03 дек 2013, 21:28

конечно. В уроках полно упоминаний как обратиться к ячейке курсора.
R.id.team

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

Wanderer
Сообщения: 4
Зарегистрирован: 02 дек 2013, 18:22

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

Сообщение Wanderer » 04 дек 2013, 14:56

Спасибо за пинок =)
Сегодня разобрался. Не знаю, костыль или нет, главное что работает.
Может кому пригодится.

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

public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
        	
        	Log.d("r/rwBD", "--- Row in table: ---");
            // делаем запрос всех данных из таблицы mytable, получаем Cursor 
            Cursor cursor = db.getAllData();

            // позиция курсора = позиции итема
            
              cursor.moveToPosition(position);
            
              // определяем номера столбцов по имени в выборке
              
              int YPhnColIndex = cursor.getColumnIndex("YPhn");
              int SPhnColIndex = cursor.getColumnIndex("SPhn");
              
              String SPHN = cursor.getString(SPhnColIndex);
              String YPHN = cursor.getString(YPhnColIndex);
              
              Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:" + SPHN )); 
              smsIntent.putExtra("sms_body", "какой то текст " + YPHN ); 
              startActivity(smsIntent);
              
             
                // получаем значения по номерам столбцов и пишем в лог
                Log.d("r/rwBD", " YPhn = " + YPHN + ", SPhn = " + SPHN);

            cursor.close();

Ответить