Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись разговоров, программа для записи разговоров 
:(
    Опции темы
Atum
Дата 11.6.2013, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Заинтересовало как реализованы такие программы на андройде ?


Нашел лишь пример записи - это программа диктофон 

 http://developer.android.com/guide/topics/...io-capture.html

а как на ее основе сделать запись - разговоров (лог всех звонков) на телефоне, чтобы программа работала в фоне и не выгружалась при очистки памяти ? 

по аналогии с 

https://play.google.com/store/apps/details?...pp.callrecorder ?

Как я понимаю нужно отловить событие подъема трубки и набора номера ,а так же окончание разговора ...

и на них повесить запись лога разговора ...

дать права приложению для этих действий 


и еще вопрос как задать источник записи ? 


Выбор источника записи (микрофон, линия, свой голос, голос собеседника) ?

качество записи? 
я правильно понимаю что нужно реализовать некий интерфейс ? по типу PhoneStateListener  ?


Код

/*
 * The application needs to have the permission to write to external storage
 * if the output file is written to the external storage, and also the
 * permission to record audio. These permissions must be set in the
 * application's AndroidManifest.xml file, with something like:
 *
 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 * <uses-permission android:name="android.permission.RECORD_AUDIO" />
 *
 */
package com.android.audiorecordtest;

import android.app.Activity;
import android.widget.LinearLayout;
import android.os.Bundle;
import android.os.Environment;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Context;
import android.util.Log;
import android.media.MediaRecorder;
import android.media.MediaPlayer;

import java.io.IOException;


public class CallRecordTest extends Activity
{
    private static final String LOG_TAG = "CallRecordTest ";
    private static String mFileName = null;


    private MediaRecorder mRecorder = null;

    private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }

 

 
 
    private void startRecording() {
        mRecorder = new MediaRecorder();
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mRecorder.setOutputFile(mFileName);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

        try {
            mRecorder.prepare();
        } catch (IOException e) {
            Log.e(LOG_TAG, "prepare() failed");
        }

        mRecorder.start();
    }

    private void stopRecording() {
        mRecorder.stop();
        mRecorder.release();
        mRecorder = null;
    }





    public CallRecordTest() {
        mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
        mFileName += "/audiorecordtest.3gp";
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

    }


}


Это сообщение отредактировал(а) Atum - 11.6.2013, 13:35
PM MAIL   Вверх
Atum
Дата 13.6.2013, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



я правильно понимаю что нужно создавать главный класс - как наследник от service ?!

и в нем реализовывать листенер на три события 

1) трубка взята - запись звонка начинается 
2) Набран номер -запись звонка начинается 
3) Разговор окончен - запись звонка закончена


какие это события? может кто подсказать ?


как сделать так чтобы сервис не занимал ресурсов и активировался исключительно на эти события ? 


И еще вопрос - почему при дебаге в нетбинсе (стоит плагин для андройд платформы) - приложение не попадает в симулятор телефона и не дебажится ? может кто пользуется netbeans ом ?
PM MAIL   Вверх
Atum
Дата 13.6.2013, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



возник еще один вопрос : Android BroadcastReceiver vs Service 

 через какой интерфейс реализовать мою задачу ? 


PM MAIL   Вверх
Dapo
Дата 14.6.2013, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: 1
Всего: 1



Наблюдаю за ходом Вашей мысли  smile  Вы в верном направлении двигаетесь smile 
BroadcastReceiver должен быть реализован внутри сервиса. Т.е. в Вашем случае нет никакого VS есть спайка этих двух классов, если, конечно, вы хотите выполнять всю работу в фоне.
Не забудьте установить InetntFilter для вашего ресивера на нужные события.
PM MAIL   Вверх
ShamanInDaHouse
Дата 14.6.2013, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.6.2013

Репутация: нет
Всего: нет



Приложение должно иметь service который бы и отслеживал события трубки, остальное найти не проблема)
PM MAIL   Вверх
Atum
Дата 15.6.2013, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



А на какие события нужно подписаться ?

 я реализовал все сейчас через : BroadcastReceiver  - но событие исходящий звонок и событие входящий звонок , не означает что разговор был ...

мне нужно понять какие это события : 

1) входящий звонок и разговор начался.(взяли трубку)
2) исходящий звонок и разговор начался
3) трубку положили


PM MAIL   Вверх
Dapo
Дата 17.6.2013, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: 1
Всего: 1



http://developer.android.com/reference/and...onyManager.html
в частности попробуйте android.intent.action.ANSWER

Это сообщение отредактировал(а) Dapo - 17.6.2013, 05:14
PM MAIL   Вверх
Metalex
Дата 27.6.2013, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 633
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Насколько я помню, безопасность фреймворка не позволяет реализовать эту задачу и понятно почему.

Это сообщение отредактировал(а) Metalex - 28.6.2013, 14:35


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
javastic
Дата 28.6.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1213
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 2
Всего: 27



А еще звук на линию разговора передается через микрофон, и не получится проиграть звуковой файл в линию. :( 
Я тоже пытался сделать автоответчик, но похоронил эту идею, особенно после прочтения обсуждений на stackoverflow.com



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Atum
Дата 22.10.2013, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Всем добрый день ! 
А как создать автоматическую отправку файлов - в облако или на почту ? 
Если есть wifi ?
PM MAIL   Вверх
Metalex
Дата 22.10.2013, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 633
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Atum, хороший тон форума: одна тема - один вопрос.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Atum
Дата 26.2.2014, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



кому интересно : определить можно так :
Код

public static boolean getNetworkStateWifiActive() {
   ConnectivityManager cm = (ConnectivityManager) app().getSystemService(Context.CONNECTIVITY_SERVICE);
   NetworkInfo ni = cm.getActiveNetworkInfo();
  return ni != null && ni.isConnected() && ni.getType() == ConnectivityManager.TYPE_WIFI;
}


Добавлено через 1 минуту и 42 секунды
Возник еще один вопрос - задачка для этого же приложения : 

создать черный список sms  и звонков - спам стал очень сильно доставать ... Хочется оградить себя на уровне своего девайса.

Нашел только для sms http://habrahabr.ru/post/146453/

а как добавить сюда же событие на проверку и входящих звонков ?
PM MAIL   Вверх
Atum
Дата 28.2.2014, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



AndroidManifest.xml



тут как я понял нужно обязательно указывать Activity - потому что по умолчанию просто сервис создать нельзя , он не запуститься ... 

дал все права

указал что android:priority="999" самый высокий , чтобы смс больше никто перехватить не смог.
Код

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.doctorweb"
    android:versionCode="1"
    android:versionName="1.2">

    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity android:name=".DoctorActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".SMSReceiver"
            android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>



Нужна ли активность ? может как - то можно без нее ? ( например оформить как сервис?)
DoctorActivity
Код


package com.example.doctorweb;

import android.app.Activity;
import android.os.Bundle;

public class DoctorActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}


BroadcastReceiver 

abortBroadcast(); - провиливаем смс и не даем его получать и на показываем ... 

Код

package com.example.doctorweb;


        import android.content.BroadcastReceiver;
        import android.content.Context;
        import android.content.Intent;
        import android.os.Bundle;
        import android.util.Log;


public class SMSReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        // TODO Auto-generated method stub
        //Intent intent2 = new Intent(context, SampleActivity.class);
        //intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //context.startActivity(intent2);

        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus");

        if (pdus.length == 0) {
            return;
        }
        Sms sms = Sms.fromPdus(pdus, context);

        try {
            if (Sms.isSenderInBlackList(sms.getSenderOriginatingAddress())) {
                abortBroadcast();
            }
            if (Sms.isSenderInBlackList(sms.getSenderDisplayOriginatingAddress())) {
                abortBroadcast();
            }

        } finally {
        }
    }
}


isSenderInBlackList - черный список номеров 
для простоты читаем просто из массива, потом просто вынести в файл для гибкой правки
Код

package com.example.doctorweb;

        import android.content.Context;
        import android.os.Build;
        import android.telephony.SmsMessage;

public class Sms {

    private String senderOriginatingAddress;
    private String senderDisplayOriginatingAddress;

    public Sms() {
    }

    public static Sms fromPdus(Object[] pdus, Context context) {
        Sms result = new Sms();

        SmsMessage first = SmsMessage.createFromPdu((byte[]) pdus[0]);
        result.senderOriginatingAddress = first.getOriginatingAddress();
        result.senderDisplayOriginatingAddress = first.getDisplayOriginatingAddress();

        return result;
    }

    private static final String[] blackList = new String[]{"9555985515"};

    public static boolean isSenderInBlackList(String sender) {
        if (sender != null) {
            for (String string : blackList) {
                if (sender.contains(string)) {
                    return true;
                }
            }
        }
        return false;
    }

    public String getSenderOriginatingAddress() {
        return senderOriginatingAddress;
    }

    public void setSenderOriginatingAddress(String senderOriginatingAddress) {
        this.senderOriginatingAddress = senderOriginatingAddress;
    }

    public String getSenderDisplayOriginatingAddress() {
        return senderDisplayOriginatingAddress;
    }

    public void setSenderDisplayOriginatingAddress(String senderDisplayOriginatingAddress) {
        this.senderDisplayOriginatingAddress = senderDisplayOriginatingAddress;
    }
}



пробовал ставить  флаг - поведение такое же - смс продолжают идти...

intent.addFlags(32);
abortBroadcast();

PM MAIL   Вверх
droider
Дата 9.7.2018, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.9.2015

Репутация: нет
Всего: нет



Приветствую, а можно так же реализовать запись звука с приложений Skype или Viber? Например, как это сделано в Cube Call Recorder?
PM MAIL   Вверх
Google
  Дата 14.10.2019, 19:16 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0883 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.