forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Android (http://forum.boolean.name/forumdisplay.php?f=150)
-   -   Телефония (http://forum.boolean.name/showthread.php?t=19471)

S_007 16.10.2014 13:58

Телефония
 
Как можно перехватить момент поднятия трубки исходящего вызова?
CALL_STATE_OFFHOOK срабатывает сразу когда номер только начал набираться. Есть какие-то решения этой проблемы, подскажите кто знает

S_007 16.10.2014 19:19

Ответ: Телефония
 
нагуглил что можно только если читать логи
logcat -v time -b radio GSM:D *:S

а как писать это в программе не знаю, никогда с логами не работал

S_007 17.10.2014 16:04

Ответ: Телефония
 
На этом форуме есть живые Developer-ы? Кто-нибудь может ответить?

Arton 17.10.2014 18:38

Ответ: Телефония
 
Цитата:

Сообщение от S_007 (Сообщение 288186)
На этом форуме есть живые Developer-ы? Кто-нибудь может ответить?

Есть, просто те кто действительно хорошо разбираются скорее всего заняты, так что жди.
За неполные сутки никто не ответит.

S_007 18.10.2014 18:13

Ответ: Телефония
 
Спасибо Anton! Буду ждать... Но походу хочу задать еще один вопрос:

есть строка: String st = "0123456789"; в которой будут только цифры от нуля до девяти
есть массив: int[] data = new int[11];

for(n = 0; n < 11; n++)
{
data[n] = .........
}

как сделать так чтоб при помощи цикла for в массив data преобразовывались в int и записывались именно цифры от нуля до девяти
короче чтоб результат был таким - data[0] = 0; data[1] = 1; data[2] = 2; и т.д.

за ранее очень благодарен за ответы

Igor 18.10.2014 18:49

Ответ: Телефония
 
я бы преобразовал строку в char[] и сделал data[n] = chars[n]-'0';

S_007 18.10.2014 21:01

Ответ: Телефония
 
Igor, можешь показать на примере?

Жека 18.10.2014 21:08

Ответ: Телефония
 
int len = st.length();
int[] data = new int[len];
for(int n = 0; n < len; n++)
{
data[n] = Integer.valueOf( st.charAt(n) );
}

S_007 18.10.2014 21:41

Ответ: Телефония
 
Жэка спасибо!!! Счас буду пробовать...

S_007 18.10.2014 21:45

Ответ: Телефония
 
Жека, безразмерное спасибо тебе за такой грамотный пример!!!
то что надо...
только единственное в этой строке добавил -48
data[n] = Integer.valueOf( st.charAt(n) -48 );
иначе в массиве получается data[0] = 48, data[1] = 49, и т.д.
Огромное Спасибо!!!

Жека 19.10.2014 10:35

Ответ: Телефония
 
Ага, гуд. :)

RegIon 19.10.2014 21:52

Ответ: Телефония
 
А лучше Integer.parseInt(), не просто же ее придумали:
PHP код:

int len st.length();
int[] data = new int[len];
for(
int n 0lenn++)
{
data[n] = Integer.parseIntst.charAt(n) );


Как-то так можно
PHP код:

try {
    
// Executes the command.
    
Process process Runtime.getRuntime().exec("/system/bin/logcat -v time -b radio GSM:D *:S");
    
    
// Reads stdout.
    // NOTE: You can write to stdin of the command 
    //       process.getOutputStream().
    
BufferedReader reader = new BufferedReader(
            new 
InputStreamReader(process.getInputStream()));
    
int read;
    
char[] buffer = new char[4096];
    
StringBuffer output = new StringBuffer();
    while ((
read reader.read(buffer)) > 0) {
        
output.append(buffer0read);
    }
    
reader.close();
    
    
// Waits for the command to finish.
    
process.waitFor();
    
    return 
output.toString();
} catch (
IOException e) {
    throw new 
RuntimeException(e);
} catch (
InterruptedException e) {
    throw new 
RuntimeException(e);



pozitiffcat 19.10.2014 22:15

Ответ: Телефония
 
Чувак, кури TelephonyManager.CALL_STATE_RINGING
Вот на всякий, код с моего Flat Player-а
PHP код:

private void initPhoneListener() {
         
PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
            @
Override
            
public void onCallStateChanged(int stateString incomingNumber) {
                if (
state==TelephonyManager.CALL_STATE_RINGING || state==TelephonyManager.CALL_STATE_OFFHOOK)
                        
mPlayer.pause();
                
super.onCallStateChanged(stateincomingNumber);
            }
        };
        
TelephonyManager telephonyMgr = (TelephonyManagergetSystemService(Context.TELEPHONY_SERVICE);
        if (
telephonyMgr != null)
            
telephonyMgr.listen(mPhoneStateListenerPhoneStateListener.LISTEN_CALL_STATE);



pozitiffcat 19.10.2014 22:16

Ответ: Телефония
 
Насчет парсинга лока - эх и костыль ты придумал. Ниче, что на разных девайсах логи как минимум разные? А могут и вообще быть отключены )))

S_007 20.10.2014 00:47

Ответ: Телефония
 
не думал что на этот форум ещё заглядывают крутые программисты...! Спасибо вам ребята, за ваши ответы и наглядные примеры. Reglon, твой пример, ну ты просто маладца! Нагуглить такого примера мне не удалось по всей паутине, спасибо тебе, теперь буду знать как с логами работать. Только уже немного остыл по поводу этого, потому что где-то прочитал, да и pozitiffcat это подтверждает, что при помощи логов не а каждом аппарате будет работать. TelephonyManager раскурил вдоль и поперек, но CALL_STATE_RINGING срабатывает при входящем звонке. А задумка была до боли банальная - именно при исходящем вызове чтоб начинал работать счетчик секунд после поднятия трубки на другом конце провода, ведь это в каждом аппарате есть, (т.е. длительность разговора) только чуваки из googla такую функцию к сожалению не сделали. Если в чём-то не прав то поправьте, буду очень рад.

Ну наберусь наглости задать ещё один вопрос
как из программы удалять входящие смс, хоть по одной хоть все
нашёл вот такой код, на нём приложение вылетает, как правильно подскажите пожалуйста

Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uriSms, null,null,null,null);
int thread_id = c.getInt(1); //get the thread_id
getContentResolver().delete(Uri.parse("content://sms/conversations/" + thread_id),null,null);


Часовой пояс GMT +4, время: 06:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot