Форум программистов, компьютерный форум CyberForum.ru

Передача файлов через BlueTooth OPP / ContentResolver - Android

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.72
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 00:28     Передача файлов через BlueTooth OPP / ContentResolver #1
Друзья, помогите пожалуйста!!! Уже второй день пляшу с бубном.

Передаю файл через BT OPP примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
        ContentValues values = new ContentValues();
 
        values.put("uri", "file://"+file);
        values.put("destination", mac);
        values.put("confirm", 2);   //USER_CONFIRMATION_AUTO_CONFIRMED
        values.put("visibility", 1);    //VISIBILITY_HIDDEN
        values.put("direction", 0); //DIRECTION_OUTBOUND
        values.put("timestamp", System.currentTimeMillis());
        
        ContentResolver cr = c.getContentResolver();
        Uri u = cr.insert(Uri.parse("content://com.android.bluetooth.opp/btopp"), values);
Всё замечательно работает, всё передается, НО - как мне получить результат передачи??????????
Передает в скрытом режиме, но потом выскакивает тост мсг типа (файл передан или нет) - как мне перехватить его, чтобы потом отобразить свой результат передачи???
Пытаюсь ловить android.btopp.intent.action.TRANSFER_COMPLETE - не клюет такое.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 00:51     Передача файлов через BlueTooth OPP / ContentResolver #2
ну наверное если "u" не null значит все в порядке.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 00:56  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #3
А чего ей быть null? Конечно что всё в порядке. Я ж и говорю, что всё прекрасно работает, но я в своём приложении не знаю как увидеть результат этой работы.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 01:01     Передача файлов через BlueTooth OPP / ContentResolver #4
Цитата Сообщение от elf32 Посмотреть сообщение
А чего её быть null?
в случае неудачной передачи например.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 01:23  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #5
Вовсе нет. Uri в любом случае не будет null и не зависит от результата передачи.
insert это не API передачи файла. Inserts a row into a table at the given URL.
Uri известен ещё даже до отправки файла.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 01:28     Передача файлов через BlueTooth OPP / ContentResolver #6
просто проверьте...

Добавлено через 2 минуты
или возможно по этому Uri можно как-то вытянуть статус передачи, проверьте что вообще получаете там...
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 01:30  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #7
Ну так по Uri то может и можно... я и спрашиваю - КАК?
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 01:33     Передача файлов через BlueTooth OPP / ContentResolver #8
insert делает вставку, в данном случае я так понимаю передачу файла и возвращает путь к вставленной строке, в данном случае возможно путь к переданному файлу или к строке в БД в которой возможно также хранится статус передачи. в случае неудачи естественно возвращается null

Добавлено через 49 секунд
посмотрите что в этом Uri записано то
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 01:54  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #9
Да не может там быть null, это совсем не причем.
null будет если на аппарате нет блютуза или content://com.android.bluetooth.opp/btopp.

Вот пример того что возвращает insert:
Uri: content://com.android.bluetooth.opp/btopp/120
Uri: content://com.android.bluetooth.opp/btopp/121
и т.д.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 02:02     Передача файлов через BlueTooth OPP / ContentResolver #10
сделайте select по этим Uri и посмотрите что там есть.

Добавлено через 4 минуты
Returns
the URL of the newly created row.

соответственно если insert прошел неудачно, то будет только null
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 02:04  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #11
Зачем select? У меня один Uri.
insert возвращает один экземпляр Uri. Мне нужно дождатся завершения передачи и получить результат передачи, а потом либо отправить ещё какой-то файл, либо отключить блютуз. Ммне нужно получить результат отправки, а не результат вызова insert. Я не знаю как по Uri получить статус передачи.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 02:32     Передача файлов через BlueTooth OPP / ContentResolver #12
вот я и говорю сделайте селект, там, вероятно, и записан результат передачи.

Добавлено через 14 минут
да, действительно, там есть поле status, а вот константы для него http://grepcode.com/file/repository....STATUS_PENDING

Добавлено через 24 секунды
нужно мониторить статус.

Добавлено через 10 минут
Цитата Сообщение от elf32 Посмотреть сообщение
Ммне нужно получить результат отправки
Цитата Сообщение от elf32 Посмотреть сообщение
а не результат вызова insert
ну, знали бы вы как работает контент провайдер поняли бы что это вполне могло бы быть одним и тем же.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 02:51  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #13
Я знаю какие есть статусы. BluetoothShare почти наизусть знаю.

А вот что и как работает - с этим пока не очень, только начинаю. Особенно контент провайдер - я почему то решил что никогда с ним работать не буду и не уделил ему внимания при изучении материала.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 03:28     Передача файлов через BlueTooth OPP / ContentResolver #14
делайте селек по полученому от инсерта Uri и мониторьте status

Добавлено через 57 секунд
и не нужно писать "visibility", используйте константы.

Добавлено через 22 минуты
Цитата Сообщение от elf32 Посмотреть сообщение
Пытаюсь ловить android.btopp.intent.action.TRANSFER_COMPLETE - не клюет такое.
как именно пытался ловить?

Добавлено через 7 минут
вот здесь вроде как готовый код мониторинга статуса http://grepcode.com/file/repository....Activity.0mUri

Добавлено через 1 минуту
даже прогрес отправки файла показывает.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 03:49  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #15
В манифесте прописывал фильтр для BroadcastReceiver'а.
Динамически создавал ресивер с тем же фильтром и регистрировал - ничего не ловит.
Другие ловит,а вот с android.btopp нет.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 03:57     Передача файлов через BlueTooth OPP / ContentResolver #16
ясно.
а с последней ссылкой разобрались?
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 04:21  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #17
Та разобрался. точнее понял суть.
Вся моя проблема в незнании работы контентПровайдера.
щас вон разберусь, напишу код.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 04:29     Передача файлов через BlueTooth OPP / ContentResolver #18
если что не ясно - спрашивайте.
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 14:16  [ТС]     Передача файлов через BlueTooth OPP / ContentResolver #19
В общем, получилось примерно так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        String[] projection = {"status"}; // "current_bytes", "total_bytes"
        int status = 0;
        
        for(int i=0; i<100; i++){
            Cursor cur = cr.query(u, projection, null, null, null);
            cur.moveToFirst();
            status = cur.getInt(cur.getColumnIndex("status"));
            if(!BluetoothShare.isStatusInformational(status)) break;
            
            try{
                TimeUnit.SECONDS.sleep(3);
            } catch(InterruptedException e){}
        }
        
        if(status == BluetoothShare.STATUS_SUCCESS){
            return true;
        }
        else{
            if(BluetoothShare.isStatusInformational(status)){
                cr.delete(u, null, null);
            }
            return false;
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2013, 22:19     Передача файлов через BlueTooth OPP / ContentResolver
Еще ссылки по теме:

Android Передача данных через Intent
Android Передача данных андроид устр. - stm по bluetooth
Android Считать все файлы *.mp3 с определенного каталога через ContentResolver
Android Работа с устройством через bluetooth
Вывод данных полученных через Bluetooth на экран Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 22:19     Передача файлов через BlueTooth OPP / ContentResolver #20
мне подход оттуда больше нравится)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        //получаем инфу
        mTransInfo = BluetoothOppUtility.queryRecord(this, mUri);
 
         //проверка на нул
        if (mTransInfo == null) {
                    Log.e(TAG, "Error: Can not get data from db");
        }
 
        //получаем флаг завершена ли передача
        mIsComplete = BluetoothShare.isStatusCompleted(mTransInfo.mStatus);
 
         //если не завершена регистрируем Observer
         if (!mIsComplete) {
            mObserver = new BluetoothTransferContentObserver();
            getContentResolver().registerContentObserver(BluetoothShare.CONTENT_URI, true,
                    mObserver);
        }
 
        // обсервер получает сообщения изменения бд
        private class BluetoothTransferContentObserver extends ContentObserver {
        public BluetoothTransferContentObserver() {
            super(new Handler());
        }
 
        @Override
        public void onChange(boolean selfChange) {
                 //произошли изменения - опять проверяем статус.
                 update();
        }
    }
Yandex
Объявления
16.02.2013, 22:19     Передача файлов через BlueTooth OPP / ContentResolver
Ответ Создать тему
Опции темы

Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru