Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Android & GSM
#1
Недавно занялся изучением платформы Android, как полагается, написал HelloWorld, далее пошли более сложные приложения... Казалось, нет предела совершенству, но, не всё так гладно, как хотелось бы. Android API ни в какую не дает доступа к GSM, какими бы путями я туда не пытался проникнуть. Я знаю, что это сделано из соображений безопасности, и что это не баг, это фича. Суть в том, что моему приложению нужно получать входные данные в виде звукового сигнала (с микрофона или гарнитуры), и отправлять их в GSM канал, и наоборот: принимать данные из GSM канала, преобразовывать в звук, и выводить на динамик\наушники. Желательно делать это поверхностно, по возможности даже без root прав. Вмешательство в ядро Android'a - самый крайний случай.

Теперь по порядку, что и как исследовалось:
Для начала, все запуски производились на Sony ericsson Xperia Neo V, с официальной прошивкой 2.3.4, без root'а и всяческих взломов.

Способ 1) Прямой доступ к классам
PHP код:
<?php 
import com
.android.internal.telephony.PhoneFactory;
....
//PhoneFactory.makeDefaultPhones(this);
Phone phone = PhoneFactory.sProxyPhone;

В результате давал:
PHP код:
<?php 
java
.lang.IllegalAccessError: tried to access field com.android.internal.telephony.PhoneFactory.sProxyPhone from class com.example.MyActivity

Получается, что Android на уровне VM блокирует подобные доступы.


Способ 2) Доступ через рефлексию.
Рефлексия не дала ничего интересного, максимум, получилось добраться до ITelephony, который также не дал явных ссылок на потоки ввода\вывода GSM.
PHP код:
<?php 
TelephonyManager tm
= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Class
c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephony = (ITelephony) m.invoke(tm);

Интересно мнение тех, кто с этим сталкивался, подтолкните, куда копать дальше? Может есть уже готовые приложения, которые так или иначе взаимодействуют с GSM данными?
http://fw-tm.ru/ - Разработка эмулятора Goddess of Destruction
Ответ
#2
пересмотреть код Андроида - ничё не дает? как он работает с GSM
consulo.io - Consulo - multi-language IDE
Ответ
#3
Neiwick, не подскажу решения, но по вашему описанию походит на программу Shazam, попробуйте из нее вытащить то, что вам нужно.
Ответ
#4
VISTALL, дает, цепочка прослеживается, проблема в том, что API не дает мне доступ к тем же классам и методам. Из моего приложения.
Sharki, shazam, насколько помню, ищет музыкальные треки по отрывкам песни, через интернет. Это немного не то, необходимо достучаться до gsm канала.
http://fw-tm.ru/ - Разработка эмулятора Goddess of Destruction
Ответ
#5
Neiwick, ну тогда попробуйте покопать программу записи разговора в MIUI прошивках(если надо, поделюсь) там она хорошо работает(есть на маркете еще ряд таких программ, но у каждой свои минусы)
Ответ
#6
Кхм-кхм...

Вообще-то, у всех официальных прошивок обычно заблокирован доступ к GSM-у (голосу). Полностью. Для того, чтобы оно работало, нужен рут и специальный модуль ядра.

На альтернативных прошивках оно обычно стоит.
Ответ
#7
Sharki, я разбирал CallRecorder, для нормальной записи голоса действительно нужна модифицированная прошивка, но запись разговоров, это немного не то. Оно работает по следующему принципу:
Открыть спойлер

Мне нужно сделать что то типо этого:
Открыть спойлер

Evengard, доступ действительно заблокирован для обычных приложений. Но есть и системные приложения, типа стандартного приложения звонков, которое по умолчанию запущено под Root'ом. Оно имеет доступ к GSM'у.
Смотрите, как расставлены приоритеты(в порядке убывания):
1) Обычное приложение, установил, и звонишь.
2) Приложение, которому необходимы права Root
3) Внесение изменений в ядро.

Первые два пункта можно совместить, т.е. попытаться сделать так, чтоб моё приложение было по своим правам как системное (устанавливалось в system/app). Третьим заниматься не охото, так как мне нужен максимально простой для конечного пользователя вариант.
http://fw-tm.ru/ - Разработка эмулятора Goddess of Destruction
Ответ
#8
хм, а почему бы тогда не взять любую звонилку? например ex Dialer. Он рута не требует, но и звонит без проблем. Может из нее сможете почерпнуть информации.
Ответ
#9
ЗВОНИТЬ и ПРОСЛУШИВАТЬ КАНАЛ - разные вещи. Для НАБОРА НОМЕРА - то, чем занимаются все "Звонилки", рут не нужен - это стандартная функция API, при наличии нужного разрешения она сработает на любом номере. Вот только ПРОСЛУШИВАТЬ это АПИ не даёт.

Та же стандартная звонилка работает на уровне обычных приложений (не под Рутом) а просто дёргает все эти АПИ. Дал "пинок" на звонок - всё, на этом задача звонилки завершается, дальше сигнал передаётся в VM, VM передаёт нативным частям мобилки, которые уже запущены под рутом, те в свою очередь стучатся к дровам. Но VM за это уже не отвечает.
Ответ
#10
Нашел два решения, оба достаточно не практичные в плане установки, зато позволяют выполнить задуманное. Если кому-то будет интересно, могу поделиться.
http://fw-tm.ru/ - Разработка эмулятора Goddess of Destruction
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Intellij Idea->Android project -> Ошибка iluhin 0 2,353 05-05-2020, 02:10 PM
Последний пост: iluhin

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)