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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.72
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
#1

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

16.02.2013, 00:28. Просмотров 3744. Ответов 31
Метки нет (Все метки)

Друзья, помогите пожалуйста!!! Уже второй день пляшу с бубном.

Передаю файл через 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 - не клюет такое.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2013, 00:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача файлов через BlueTooth OPP / ContentResolver (Программирование Android):

Передача данных через bluetooth - Программирование Android
сразу скажу я новичок в программировании так что не судите строго о моем вопросе. допустим нужно сделать приложение которое запускает...

Считать все файлы *.mp3 с определенного каталога через ContentResolver - Программирование Android
Подскажите, возможно ли так сделать? Или надо рекурсивно обходить каталог и добавлять найденные файлы в список? В таком случае информация...

Передача файлов через NFC - Программирование Android
У меня нет познаний в Java и тем более в программировании под Android, но так уж вышло что мне нужно сделать приложение, которое передаёт...

Передача данных по Bluetooth - Программирование Android
Проблема в следующем, после определенного количества переданных байт(зависит от телефона, на huawei ~ 500, на nexus 4 ~ 1700) от Андроида...

ContentResolver - Программирование Android
Для чего применяется класс ContentResolver?? И какие элементы относятся именно к UI потоку: Я знаю Activity, сервис, ресивер а что еще...

Передача данных андроид устр. - stm по bluetooth - Программирование Android
Здравствуйте, есть задача передавать данные с android планшета на на плату с микро-ом stm с bluetooth модулем. У bluetooth модуля...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 03:57 #16
ясно.
а с последней ссылкой разобрались?
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 04:21  [ТС] #17
Та разобрался. точнее понял суть.
Вся моя проблема в незнании работы контентПровайдера.
щас вон разберусь, напишу код.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 04:29 #18
если что не ясно - спрашивайте.
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 14:16  [ТС] #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;
        }
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 22:19 #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();
        }
    }
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 22:49  [ТС] #21
у меня компактное приложение
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 22:56 #22
не понял
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 23:03  [ТС] #23
ну зачем мне лишние классы подключать, с кучей не нужных методов
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 23:11 #24
чтобы слушать изменения а нее самому перепроверять, это считается в сто раз правильнее...
плюс вы поток тормозите, нужен вывод в отдельный поток вашего кода.

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

Добавлено через 1 минуту
если ваш код запустить в UI потоке, то велика вероятность что пользователь увидит сообщение "программа не отвечает. закрыть?"

Добавлено через 3 минуты
обычно создаются множество дополнительных классов аля Handler, Listener, Callback, это нормальная практика.
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
16.02.2013, 23:40  [ТС] #25
да не, этот код будет в сервисе.
как раз в потоке и нужно ждать завершения передачи.
+своеобразный таймаут на 5 минут
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.02.2013, 23:41 #26
в моем случае не нужно сервисов и потоков.
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
17.02.2013, 01:52  [ТС] #27
верно, но у меня другие задачи. я не выделяю сервис для передачи файла, сервис занимается другим делом, но когда постает задача отправить файл - он это должен сделать и дождатся результата, а потом уже на основании его решить что делать дальше.
Спасибо за помощь.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.02.2013, 02:29 #28
а не будет ли такая реализация тормозить остальные задачи сервиса?

Добавлено через 2 минуты
если дополнительный поток не выделите, то до 300 секунд зависнет все на этом коде.

Добавлено через 1 минуту
да лишние запросы к БД нужно избегать при возможности.
0
elf32
-13 / 8 / 0
Регистрация: 15.02.2013
Сообщений: 87
17.02.2013, 02:54  [ТС] #29
Всё верно. зависнет пока не получит результат, так мне и надо ибо ничего более в сервисе не может работать пока не будет известен результат отправки.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.02.2013, 02:56 #30
странный сервис какой-то)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 02:56
Привет! Вот еще темы с ответами:

Просмотр файлов другого устройства по Bluetooth - Программирование Android
Здраствуйте, мне нужна помощь (я начинаю только программировать на андроид). Как на сэмпловском примере блютуз чата можно сделать...

Работа с устройством через bluetooth - Программирование Android
Требуется сделать приложение на андройд чтобы оно соединялось с блютуз устройством и приняло от него данные. Идея создать блютуз передатчик...

Вывод данных полученных через Bluetooth на экран - Программирование Android
Есть датчик dht22 с него приходят 2 показателя: Температура и влажность,требуется получить данные по блютус на смартфон и вывести на экран....

Установка приложения на телефон через Bluetooth в Eclipse, используя BT адаптер - Программирование Android
раньше телефон подключался по USB и приложения тестировались на нем. Теперь я купил BT адаптер и нужно проверить на нем. Можете подсказать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.02.2013, 02:56
Ответ Создать тему
Опции темы

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