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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
#1

Отлов работы диктофона - Android

10.05.2013, 14:34. Просмотров 1266. Ответов 18
Метки нет (Все метки)

Приложение работает в фоновом режиме, и при включении диктофона должна выводить уведомление.
вот кусок кода:
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
void mainTask() {
        Runnable runnable = new Runnable() {
             
            @Override
            public void run() {
                int k=0;
                int indikator=0;
                Log.d(LOG_TAG, "onWork");
                indikator = mrec.getState();
                if (indikator==AudioRecord.STATE_INITIALIZED){
                    if (k==0){
                        Log.d(LOG_TAG, "TAKE IT");
                        createNotification();
                        addToDataBase();
                    
                    k=1;
                    }
                }
                else {
                    k=0;
                }
                mainTask();
            }
        };
        mHandler.postDelayed(runnable, 1000);
    }
Работа диктофона не палится, есть идеи почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 15:35     Отлов работы диктофона #2
Цитата Сообщение от Акыл Посмотреть сообщение
Работа диктофона не палится, есть идеи почему?
Скорее всего, потому что объект "Диктофон" не создан еще.

Какой статус тебе выдает вместо ожидаемого? Думаю что это поможет решить проблему быстрее.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 15:41  [ТС]     Отлов работы диктофона #3
диктофон создан в методе onCreate():
Java
1
2
3
4
bufferSize= AudioRecord.getMinBufferSize(samplerate,AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT)*2;
        mrec=new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT, bufferSize);
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 15:44     Отлов работы диктофона #4
Цитата Сообщение от Акыл Посмотреть сообщение
диктофон создан в методе onCreate():
А какой статус? Может быть он некорректно создан?
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 15:45  [ТС]     Отлов работы диктофона #5
не могу его получить, секунду
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 15:49     Отлов работы диктофона #6
Еще необходимо проверить сам bufferSize, возможо в нем проблема. Я не пойму зачем ты его умножаешь на 2. Что это за magic number?

Выполни еще такие проверки

Java
1
2
3
4
5
6
7
8
9
if(bufferSize == AudioRecord.ERROR) {
    Log.d("getMinBufferSize returned ERROR");
    return;
}
    
if(bufferSize == AudioRecord.ERROR_BAD_VALUE) {
   Log.d("getMinBufferSize returned ERROR_BAD_VALUE");
   return;
}
после того как получил значение для него.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 16:01  [ТС]     Отлов работы диктофона #7
Java
1
2
3
4
5
6
7
8
9
10
11
if(bufferSize == AudioRecord.ERROR)
        {
            Log.d(LOG_TAG, "getMinBufferSize returned ERROR");
            return;
        }
        
        if(bufferSize == AudioRecord.ERROR_BAD_VALUE)
        {
            Log.d(LOG_TAG, "getMinBufferSize returned ERROR_BAD_VALUE");
            return;
        }
Ничего не вернули

Добавлено через 2 минуты
05-10 11:57:12.034: E/AudioRecord(936): Could not get audio input for record source 1
05-10 11:57:12.034: E/AudioRecord-JNI(936): Error creating AudioRecord instance: initialization check failed.
2 ошибки в логах
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 16:46     Отлов работы диктофона #8
Если не жалко скинь проект полностью, я гляну. Что там у тебя не так. Как видишь мое предположение оказалось верным, AudioRecord создавался не правильно.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 16:51  [ТС]     Отлов работы диктофона #9
http://**********/files/mne5ei6xl
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 17:10     Отлов работы диктофона #10
Ну во первых ты не добавил в Manifest
XML
1
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Теперь AudioRecord создается верно, но стала сыпаться база данных. Сейчас еще глубже копну.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 17:40  [ТС]     Отлов работы диктофона #11
да, бд хз
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 17:46     Отлов работы диктофона #12
Придется тебе поправить несколько методов:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void onCreate() {
        super.onCreate();
 
        Log.d(LOG_TAG, "onCreate");
 
        sqh = new DataBaseFunc(this);
        sqdb = sqh.getWritableDatabase();
 
        mHandler = new Handler();
 
        bufferSize = AudioRecord.getMinBufferSize(samplerate,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT);
 
        mrec = new AudioRecord(AudioSource.MIC, samplerate,
                AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
                bufferSize * 10);
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void addToDataBase() {
        Log.d("TAG", ":: addToDataBase :: ");
        String insertQuery;
        ActivityManager am = (ActivityManager) this
                .getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
 
        Log.d("TAG", componentInfo.getPackageName());
 
        insertQuery = "INSERT INTO " + DataBaseFunc.TABLE_NAME + " ( "
                + DataBaseFunc.TIME + ", " + DataBaseFunc.PACKAGE
                + " ) VALUES ( '" + getTimeAndDate() + "', '"
                + componentInfo.getPackageName() + "');";
        sqdb.execSQL(insertQuery);
    }
Все теперь работает как и должно, в базу пишет.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 17:48  [ТС]     Отлов работы диктофона #13
чувак, спасибо)

Добавлено через 7 секунд
большое)
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 17:49     Отлов работы диктофона #14
Но так ты не сможешь отловить когда был запущен диктофон. Я вообще не до конца понял задачу. Ты сам, после того как создал объект AudioRecord можешь производить запись, но я не уверен что так можно перехватить какой-то другой диктофон.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 18:01  [ТС]     Отлов работы диктофона #15
да я уже это понял

Добавлено через 2 минуты
А если начать запись на диктофон, т.е. начинать и останавливать запись каждые 0,5 сек. можно что ли бо получить?
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 18:02     Отлов работы диктофона #16
Есть конечно один способ. Реализуется довольно легко на основе твоего сервиса, но есть одна загвоздка - тебе необходимо знать имя пакета приложения "Диктофон".
В том месте где ты получаешь имя приложения, которое находится на фронте, ты можешь его прочекать, и если оно тебе подходит запускать показ уведомления.
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 18:08  [ТС]     Отлов работы диктофона #17
суть в том, что я должен отлавливать любое приложение, которое запускает диктофон
jumb0jet
16 / 16 / 0
Регистрация: 08.05.2013
Сообщений: 40
10.05.2013, 18:18     Отлов работы диктофона #18
Акыл, в программировании нет практически ничего невозможного, но к сожалению это нельзя реализовать (насколько мне известно).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 20:32     Отлов работы диктофона
Еще ссылки по теме:

Примеры работы с SQLite Android
Android Принцип работы Service
Ускорение работы AS Android
Ошибка записи диктофона Android
Android Тема дипломной работы

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

Или воспользуйтесь поиском по форуму:
Акыл
6 / 6 / 0
Регистрация: 22.03.2012
Сообщений: 128
10.05.2013, 20:32  [ТС]     Отлов работы диктофона #19
спасибо в любом случае, буду искать.

Добавлено через 2 часа 11 минут
кто будет делать что похожее, я нашел выход:
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
void mainTask() {
        Runnable runnable = new Runnable() {
             
            @Override
            public void run() {
                int k=0;
                int indikator=0;
                Log.d(LOG_TAG, "onWork");
                mrec.startRecording();
                indikator = mrec.getRecordingState();
                if (indikator!=AudioRecord.RECORDSTATE_RECORDING){
                    if (k==0){
                        Log.d(LOG_TAG, "TAKE IT");
                        createNotification();
                        addToDataBase();
                    
                    k=1;
                    }
                }
                else {
                    k=0;
                }
                mrec.stop();
                mainTask();
            }
        };
        mHandler.postDelayed(runnable, 1000);
    }
Yandex
Объявления
10.05.2013, 20:32     Отлов работы диктофона
Ответ Создать тему
Опции темы

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