На вашей SIM-карте могут быть два разных типа апплетов.
Общие апплеты
Общие апплеты, написанные на простом JavaCard. Это тип апплета, из которого вы привыкли в мире обычных смарт-карт. У него есть метод process
, а смарт-карта - это пассивный объект в сообщении: ваше приложение отправляет команды APDU и ответы на карточку.
Вы можете общаться с этими апплетами, используя специальный набор Android-библиотек под названием SEEK для Android. Посмотрите на это tutorial, чтобы узнать, как создать такое приложение для телефона.
Начиная с уровня API 21, существует также способ связи с SIM-картой с использованием Telephony Manager. Однако есть одно огромное препятствие: вашему приложению требуется разрешение MODIFY_PHONE_STATE
, которое может предоставляться только системным приложениям. Повторное, не-системное приложение не может использовать его.
SIM Toolkit апплеты
SIM-карта намного больше, чем просто общий смарт-карты и писать апплет для SIM-карты может быть гораздо более сложным, чем для общего смарт-карты, если вы хотите использовать все возможности, предлагаемые SIM-картой. Я рекомендую вам прочитать this paper - это чей-то диплом бакалавра, но это лучший обзор для новичка, которого я нашел по всему Интернету. Я также рекомендую this video from the DefConn conference.
Роль апплета, загруженного на SIM-карту, отличается: апплет больше не является пассивным объектом. Телефон регулярно спрашивает ваш апплет: «Есть ли что-нибудь новое, что я могу сделать для вас?» и ваш апплет может ответить: «Да, отправьте это SMS-сообщение» или «Скажите, в какое время это» и т. д. Кроме того, ваш апплет может стать слушателем некоторых событий: входящего вызова, полученных SMS-сообщений, истекшего интервала времени и т. д.Да, SIM-карта кажется пассивной с технической точки зрения, но ее роль фактически активна: SIM-карта отправляет команды на телефон.
Эти команды называются «проактивными командами» или командами SIM Application Toolkit. Структура такая же - CLA INS P1 P2 LC данные LE; смысл другой.
Вы можете отправить их из своего апплета, используя классы в специальном пакете JavaCard, который называется sim.toolkit
.
(SIM Application Toolkit является стандартом, который определяет активные команды таким же образом, Global Platform определяет жизненный цикл апплета.)
Пример апплета Инструментарий SIM:
import sim.toolkit.ToolkitInterface;
import sim.toolkit.ToolkitRegistry;
...
import javacard.framework.ISOException;
public class STKTest extends Applet implements ToolkitInterface {
public static void install(byte[] bArray, short bOffset, byte bLength) {
// GP-compliant JavaCard applet registration
new STKTest().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
//this method handles standard APDU commands
public void process(APDU apdu) {
// Good practice: Return 9000 on SELECT
if (selectingApplet()) {
return;
}
apdu.setIncomingAndReceive();
final byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS]) {
case (byte) 0x00:
//do something
break;
}
}
//this method handles the SIM Toolkit commands
public void processToolkit(byte event) throws ToolkitException {
switch (event) {
case ToolkitConstants.EVENT_TIMER_EXPIRATION:
//do something
break;
}
}
}
Да, вы должны научиться Android - вам понадобится использовать библиотеку SEEK. Ваш вопрос очень широк, пожалуйста, спросите меня о каких-либо деталях, если хотите.
Спасибо, дорогой vojta. ** 1 - ** Итак, _SEEK для Android_ - это библиотека, которую я использую для написания апплета для моего мобильного набора (а не для SIM/USIM) для связи с апплетами на USIM/SIM, верно? ** 2 - ** Вы знаете, что такое _SIM Toolkit Applicatin_ (aka STK)? – Jean
Проактивные команды похожи на обычные команды APDU? Я имею в виду, что у них есть 4-байтовый обязательный заголовок, содержащий CLA, INS, P1 и P2? или они совершенно разные? – Jean
В разделе 1 вы подчеркнули, что общие смарт-карты являются пассивной ролью в сообщении. это верно. но означает ли это, что карты USIM/SIM могут играть активную роль в общении с телефоном или они также ждут команд всегда, и они не могут начать общение? вы сказали, что телефон регулярно спрашивает апплет: «Есть ли что-нибудь новое, что я могу сделать для вас?» (** то же приложение, которое написано с помощью SEEK для библиотеки Android? **), и апплет на SIM-карте отвечает на него. поэтому SIM еще пассивен. не так ли? – Jean