powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Прием звонка
25 сообщений из 28, страница 1 из 2
Прием звонка
    #39554738
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
31.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TelephonyManager.[color=red]listen[/color](stateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }
}[color=red]~[/color]

    PhoneStateListener stateListener = new PhoneStateListener() {
        public void onCallStateChanged(int state, String incomingNumber) {
            switch (state) {
                case TelephonyManager.CALL_STATE_IDLE: break;
                case TelephonyManager.CALL_STATE_OFFHOOK: break;
                case TelephonyManager.CALL_STATE_RINGING:
                    Toast.makeText(getApplicationContext(), incomingNumber, Toast.LENGTH_LONG).show();
                    try {
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }
    };[color=red]~[/color]


Пишет Non-static method listen cannot be referenced from a static context
Куда static писать?
...
Рейтинг: 0 / 0
Прием звонка
    #39554747
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со скобками разобрался. Остался listen
...
Рейтинг: 0 / 0
Прием звонка
    #39554832
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Прием звонка
    #39555069
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Я как понял замахнулся на слона. Решил разбирать слона на части.

1.) Сервис, который живет после выхода из приложения получился.
2.) Сервис, который живет после перезагрузки смартфона пока нет.

Код: java
1.
2.
3.
4.
5.
6.
public class BootBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {       
        context.startService(new Intent(context, MyService.class));
    }
}



Не пойму, как запустить BootBroadcast (прописал в минифесте, как BOOT_COMPLETED), который запустит Сервис

3.)В сервисе реализовать слушателя состояния смартфона и выковыривать входящий номер

Или я создал Широковещательный приемник BootBroadcast, который запустит Сервис после перезагрузки?
...
Рейтинг: 0 / 0
Прием звонка
    #39555082
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaStudentпрописал в минифесте, как BOOT_COMPLETED
Как-то сложно гадать по кофейной гуще...
...
Рейтинг: 0 / 0
Прием звонка
    #39555108
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        
          <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <receiver android:name=".BootBroadcast">
                <intent-filter >
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                </intent-filter>
            </receiver>
        </activity>
        <service
            android:name=".MyService"
            android:enabled="true"
            android:exported="false" >
        </service>


Я столкнулся с другой задачей. При перезагрузке смартфона, надо как-то еще к MyService подключится... И еще в уведомление сообщения закидывать, мол сервис работает.
...
Рейтинг: 0 / 0
Прием звонка
    #39555163
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут почитай про сервисы https://www.google.com/search?q=startandroid startservice
...
Рейтинг: 0 / 0
Прием звонка
    #39555212
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, читаю там и тут, везде где попадается.

Я правильно понял, что мне нужно сделать:

1) Сервис, который крутится в смартфоне и ждет сигнала на отработку

2) Широковещательный приемник в сервисе, который ждет звонок и запускает отработку

3) Отсылка POST запроса из сервиса, когда Широковещательный приемник обнаружил звонок

4) Определение номера звонка

5) Широковещательный приемник в сервисе, который запускает сервис после перезагрузки смартфона

6) Приложение, которое запускает, и останавливает сервис.

Попробую по кускам сделать. Пока сервис мой вылетает, когда из него шлю POST запрос.
...
Рейтинг: 0 / 0
Прием звонка
    #39555256
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача не понятна пока что.

Но в принципе описано верно: приемник бутлоад стартует слушателя звонков. Само приложение тоже может запускать слушателя. Слушатель уже может запускать нужные ему сервисы по событиям запускать.
...
Рейтинг: 0 / 0
Прием звонка
    #39555333
Andrej_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaStudentПишет Non-static method listen cannot be referenced from a static context
Куда static писать?1. Создать объект TelephonyManager tm;
2. Юзать его методы.
3. Прием входящих звонков сторонними приложениями заблокирован, начиная с Android 6 "в целях безопасности". До 6 версии можно.
...
Рейтинг: 0 / 0
Прием звонка
    #39555357
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Задачка простая. Я написал программу в которой нужно регистрировать заявки, в том числе и вводить телефонные номера.

Набирать клиентам, сотрудникам, писать смс и.т.д. Еще их 3 номера телефона. Смотреть на этого сотрудника страшно.

2 гарнитуры в 2 ушах.... Хочу попробовать сделать так, чтобы сотрудник не брал смартфон в руки...... И номер не списывал со

смартфона. До набора номера мне еще далеко, а вот передать номер входящего звонка в базу и обработать его, я как понимаю смогу.

С сервисом разобрался. Пытаюсь подсунуть вместо простого сервиса вот этот.

Это сервис

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class ServiceReceiver extends BroadcastReceiver {
    TelephonyManager telephony;
    public void onReceive(Context context, Intent intent) {
        MyPhoneStateListener phoneListener = new MyPhoneStateListener();
        telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
    }
    public void onDestroy() {
        telephony.listen(null, PhoneStateListener.LISTEN_NONE);
    }

} 



Это класс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
public class MyPhoneStateListener extends PhoneStateListener {
    final String LOG = "myLog";
    public void onCallStateChanged(int state, String incomingNumber) {
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                Log.d(LOG, "IDLE");
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.d(LOG, "OFFHOOK");
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                Log.d(LOG, "RINGING"+ incomingNumber);
                break;
        }
    }

}



MainActivity откуда запускаю сервис 2 кнопки...

Код: 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.
public class MainActivity extends AppCompatActivity {
    final String LOG = "myLog";

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }
    public void onClickStart(View v) {
        Log.d(LOG, "onClickStart");
        startService(new Intent(this, ServiceReceiver.class));
    }
    public void onClickStop(View v) {
        Log.d(LOG, "onClickStop");
        stopService(new Intent(this, ServiceReceiver.class));
    }
    public class BootBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, ServiceReceiver.class));
    }
    }

}


Пока ничего не понимаю. Разбираюсь.
...
Рейтинг: 0 / 0
Прием звонка
    #39555361
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел косяк. Пытаюсь вместо сервиса подсунуть широковещателя. Надо запустить из сервиса широковещателя.... и слушать его.
Ошибку обнаружил в манифесте, когда пытался широковещателя назвать сервисом.
...
Рейтинг: 0 / 0
Прием звонка
    #39555362
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь объявить в сервисе слушателя

Код: java
1.
2.
3.
4.
5.
6.
7.
public int onStartCommand(Intent intent, int flags, int startId)
 {
       IntentFilter filter = new IntentFilter();
       filter.addAction(TelephonyManager.CALL_STATE_RINGING);
       registerReceiver(ServiceReceiver, filter); 
       return super.onStartCommand(intent, flags, startId);
}



Ошибки лезут.
...
Рейтинг: 0 / 0
Прием звонка
    #39555426
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибок нет. Но слушателя не знаю, как проверить.
Чего слушает? Где слушает?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class MyService extends Service {
    final private String LOG = "myLog";
    private static TelephonyManager telephony;
    public void onCreate() {
        super.onCreate();
        final BroadcastReceiver ServiceReceiver = new BroadcastReceiver()
        {
            public void onReceive(Context context, Intent intent) 
           {
                MyPhoneStateListener phoneListener = new MyPhoneStateListener();
                telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
            }
            public void onDestroy() {
                telephony.listen(null, PhoneStateListener.LISTEN_NONE);
            }
        };
        IntentFilter filter = new IntentFilter();
        filter.addAction(READ_PHONE_STATE);
        registerReceiver(ServiceReceiver, filter);
    }



Подскажите, куда копать? Мои строчки:
Код: java
1.
2.
3.
4.
        
        IntentFilter filter = new IntentFilter();
        filter.addAction(READ_PHONE_STATE);
        registerReceiver(ServiceReceiver, filter);



Может тут чего не так?
...
Рейтинг: 0 / 0
Прием звонка
    #39556379
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там оказалось все просто. Слушатель регистрируется либо в манифесте, либо в приложении. Дальше он живет своей жизнью. Если его не прибьет система... Если в манифесте, то я не понял, как его отключать. Номер телефона ловит на ура и отсылает POST запросом.
Набор номера и отсылка sms, думал не справлюсь с permission или вообще нельзя, но оказалось 2 строчками в коде и 2 строчками в манифесте...

Это класс слушателя
Код: 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.
31.
32.
33.
34.
   public class PhoneReceiver extends BroadcastReceiver {
    private TelephonyManager mTelephonyManager;
    public static boolean isListening = false;
    public static String LOG = "myLog";
    private String str;
    @Override
    public void onReceive(final Context context, Intent intent) {

        mTelephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
        PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                Log.d(LOG, "state="+state);
                switch (state) {
                    case TelephonyManager.CALL_STATE_RINGING:
                        switch (state) {
                            case TelephonyManager.CALL_STATE_IDLE: break;
                            case TelephonyManager.CALL_STATE_OFFHOOK: break;
                            case TelephonyManager.CALL_STATE_RINGING:
                                if (isListening) {
                                    Log.d(LOG, "RINGING=" + incomingNumber);
                                }
                             break;
                        }
                  }
            }
        };
       if(!isListening) {
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
            isListening = true;
            Log.d(LOG, "listening");
       }
    }



Регистрация слушателя из Activity

Код: java
1.
2.
 
this.registerReceiver(PhoneReceiver, new IntentFilter("android.intent.action.PHONE_STATE")); 



Манифест:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.LISTEN_CALL_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
....



Всем спасибо ! Без вас не справился бы.
...
Рейтинг: 0 / 0
Прием звонка
    #39556955
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Система вышибает такого слушателя, если приложение закрыто. Какое-то время живет слушатель, потом выносит.
Я как понял, из-за того, что слушателя регистрирую из Activity. Кто знает как сервис сделать слушателем?
Попробую зарегистрировать слушателя при создании сервиса. Если регистрировать его через манифест, то как его отключать?
...
Рейтинг: 0 / 0
Прием звонка
    #39557007
Oleg Shishkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объявляй в манифесте свой BrodcastReciever - в него будешь принимать сообщения. Из него в течение 4 сек ты должен вывалиться. А то приложение упадет. Соответственно в BrodcastReciever ты должен или стартовать сервис через intent или передавать сообщение через EventBus в singleton
...
Рейтинг: 0 / 0
Прием звонка
    #39557022
Oleg Shishkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Прием звонка
    #39557237
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg Shishkin, Я запутался. BroadcastReceiver запустил из сервиса. BroadcastReceiver должен кинуть номер телефона. Сервис должен принять номер и отработать в потоке запрос к MySQL. Еще надо запустить таймер в потоке, который будет запускать запрос к MySQL
отсылать sms. Все работает по отдельности. BroadcastReceiver, Timer, Service, POST запрос к mySQL, отсылка sms.

Надо научиться кидаться номером телефона в сервис...

Есть надежда, что может система не убьет BroadcastReceiver, если жив Servise, который его запустил. И понять кто кого запускает.

ковыряю https://habrahabr.ru/post/265159/
...
Рейтинг: 0 / 0
Прием звонка
    #39557249
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class PhoneReceiver extends BroadcastReceiver {
    private TelephonyManager mTelephonyManager;
    public static boolean isListening = false;
    public static String LOG = "myLog";
    private String js;
    @Override
    public void onReceive(final Context context, Intent intent) {

        mTelephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
        PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                Log.d(LOG, "state="+state);
                switch (state) {
                    case TelephonyManager.CALL_STATE_RINGING:
                        switch (state) {
                            case TelephonyManager.CALL_STATE_IDLE: break;
                            case TelephonyManager.CALL_STATE_OFFHOOK: break;
                            case TelephonyManager.CALL_STATE_RINGING:
                                if (isListening) {
                                 js=incomingNumber.replace("+","")

// Не могу понять, чего писать вместо (?????)
                                    Intent intfil =new Intent(?????,MyService.class).putExtra(js,1);
// Эта строка красная
                                    startService(intfil);

                                }
                             break;
                        }
                  }
            }
        };
       if(!isListening) {
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
            isListening = true;
            Log.d(LOG, "listening");
       }
    }



День утра мудрее. Пойду спать. 2 дня битвы позади.
...
Рейтинг: 0 / 0
Прием звонка
    #39557304
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaStudent
Код: java
1.
// Не могу понять, чего писать вместо (?????)


context вполне сгодится.
...
Рейтинг: 0 / 0
Прием звонка
    #39557421
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
context вводил, он подчеркивается.
Попробую
context.startService(new Intent(context, MyService.class).putExtra(str, 1));

Я до конца не понял кто кого поднимает.

Читал что BroadcastReceiver долго не живет, нужен Service. А Service получил, сработал, отвалил. Я сейчас добился, что
BroadcastReceiver переживает перезагрузку, выход из приложения, 1 сутки не вылетает. Сейчас надо научиться в сервис подсовывать
задачки на выполнение, и выполнять задачи по таймеру слушать MySQL. Пока отсылку номера делает BroadcastReceiver, хочу переложить эту задачку на Service. И разобраться откуда и кого запускать.

Сейчас: Activity запускает Service, Service запускает BroadcastReceiver слушателей CALL,SMS,BOOT
BroadcastReceiver шлет Intent Service, Service принимает и отрабатывает.

Если BroadcastReceiver умрет, то Service не сработает. Если Service умрет, то BroadcastReceiver(ы) ни к чему... Приемник убит.
Хочется их связать, чтобы умирали, то вместе и с предсмертной запиской. Убили, работать не будет.

Задача управлять 3 задачками не беря смарфон в руки. Набирать номер, рассылка cmc , пересылать входящий номер для ввода в базу данных.
...
Рейтинг: 0 / 0
Прием звонка
    #39557435
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JavaStudentЧитал что BroadcastReceiver долго не живет
Он запускается только при необходимости (при получении события) и ему дается несколько секунд жизни на всёпровсё.

Чтобы понять, как оно работает и живет, можно создать пустой приемник, который просто кидает в лог события старта и запустить в отладке на телефоне. Потом добавить запуск сервиса, который пишет в базу и тоже с логом.

Помимо встроенного слушателя логов в студии есть внешний android monitor.
...
Рейтинг: 0 / 0
Прием звонка
    #39557804
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен. Что сначала надо набросать болванку. Отработать вкл и выкл всего и всех. Я плохо понял Intent ы. Пойду изучать мат.часть...
Наскоком получилось. Но почему работает не пойму. И пока в service задачку из слушателя не получилось закинуть.

p.s.
Если точно знаешь, кто виноват - не выдавай себя.))
...
Рейтинг: 0 / 0
Прием звонка
    #39558256
JavaStudent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал еще одного слушателя Alarm extends BroadcastReceiver. Он проверяет каждые n минут и если сервис убили, запускает его.

if (!isRunning(context)) {
context.startService(new Intent(context, MyService.class));
}

После проверки isRunning(context) запустим задачку... сегодня попробую.

Есть разница где находится слушатель в отдельном файле или вложен в service?
(intent к Service пишется по другому, в манифесте receiver регистрируется по другому, а еще подводные камни?)

Alarm extends BroadcastReceiver я сделал внутри Service, есть смысл перенести слушателя LISTEN_CALL_STATE туда же.
Или без разницы?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Android [игнор отключен] [закрыт для гостей] / Прием звонка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]