Недавно занялся изучением платформы Android, как полагается, написал HelloWorld, далее пошли более сложные приложения... Казалось, нет предела совершенству, но, не всё так гладно, как хотелось бы. Android API ни в какую не дает доступа к GSM, какими бы путями я туда не пытался проникнуть. Я знаю, что это сделано из соображений безопасности, и что это не баг, это фича. Суть в том, что моему приложению нужно получать входные данные в виде звукового сигнала (с микрофона или гарнитуры), и отправлять их в GSM канал, и наоборот: принимать данные из GSM канала, преобразовывать в звук, и выводить на динамик\наушники. Желательно делать это поверхностно, по возможности даже без root прав. Вмешательство в ядро Android'a - самый крайний случай.
Теперь по порядку, что и как исследовалось:
Для начала, все запуски производились на Sony ericsson Xperia Neo V, с официальной прошивкой 2.3.4, без root'а и всяческих взломов.
Способ 1) Прямой доступ к классам
PHP код:
import com.android.internal.telephony.PhoneFactory;
....
//PhoneFactory.makeDefaultPhones(this);
Phone phone = PhoneFactory.sProxyPhone;
В результате давал:
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 код:
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 данными?