Na karcie SIM mogą znajdować się dwa różne typy apletów.
Wspólne aplety
Wspólne aplety napisane prostym JavaCard. Jest to typ apletu, do którego przywykłeś ze świata popularnych kart inteligentnych. Ma on metodę process
, a karta inteligentna jest pasywnym tematem w komunikacji: Twoja aplikacja wysyła polecenia APDU i odpowiedzi karty.
Możesz komunikować się z tymi apletami za pomocą specjalnego zestawu bibliotek Androida o nazwie SEEK dla Androida. Zapoznaj się z tym tutorial, aby dowiedzieć się, jak utworzyć taką aplikację telefoniczną.
Począwszy od poziomu interfejsu API 21, istnieje również sposób komunikacji z kartą SIM przy użyciu Telephony Manager. Istnieje jednak jedna ogromna przeszkoda: Twoja aplikacja wymaga uprawnień, które można przyznać tylko aplikacjom systemowym. Raczej niesystemowa aplikacja nie może z niego korzystać.
SIM Toolkit Aplety
karta
SIM jest znacznie więcej niż tylko wspólne karty inteligentnej i pisania apletu na karcie SIM może być dużo bardziej skomplikowane niż dla wspólnej karty inteligentnej, jeżeli chcesz korzystać ze wszystkich możliwości oferowane przez kartę SIM. Polecam przeczytać this paper - to czyjś tytuł licencjata, ale jest to najlepszy przegląd dla początkującego, którego znalazłem w Internecie. Polecam również this video from the DefConn conference.
Rola apletu załadowanego na karcie SIM jest inna: aplet nie jest już obiektem pasywnym. Telefon regularnie prosi o aplet: "Czy mogę coś dla ciebie zrobić?" a Twój aplet może odpowiedzieć: "Tak, wyślij tę wiadomość SMS" lub "Powiedz mi, która jest godzina" itd. Co więcej, Twój aplet może stać się słuchaczem niektórych zdarzeń: połączenia przychodzącego, odebranych wiadomości SMS, upływającego czasu itp.Tak, karta SIM wydaje się pasywna z technicznego punktu widzenia, ale jej rola jest w rzeczywistości aktywna: to karta SIM wysyła polecenia do telefonu.
Te polecenia nazywają się "proaktywnymi poleceniami" lub poleceniami pakietu SIM Application Toolkit. Struktura jest taka sama - dane CLA INS P1 P2 LC LE; znaczenie jest inne.
Możesz wysyłać je z apletu za pomocą klas w specjalnym pakiecie JavaCard o nazwie sim.toolkit
.
(SIM Application Toolkit jest standardem, który określa proaktywnych poleceń w taki sam sposób globalna platforma określa cykl apletu.)
Przykład SIM Toolkit apletu:
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;
}
}
}
Tak, należy nauczyć Android - będziesz go potrzebować do korzystania z biblioteki SEEK. Twoje pytanie jest bardzo szerokie, proszę pytać mnie o wszelkie szczegóły, jeśli chcesz.
Dzięki droga Vojta. ** 1 - ** Więc _EEK dla Androida_ to biblioteka, której używam do pisania apletu dla mojego zestawu mobilnego (a nie dla SIM/USIM) do komunikacji z apletami na USIM/SIM, prawda? ** 2 - ** Czy masz pojęcie, co to jest _SIM Toolkit Applicatin_ (aka STK)? – Jean
Czy polecenia proaktywne są podobne do zwykłych poleceń APDU? Mam na myśli, czy mają 4-bajtowy nagłówek obowiązkowy zawierający CLA, INS, P1 i P2? lub są całkowicie różne? – Jean
W sekcji 1 podkreśliłeś, że wspólne karty inteligentne są pasywną rolą w komunikacji. Zgadza się. ale czy to oznacza, że karty USIM/SIM mogą pełnić aktywną rolę w komunikacji z telefonem, czy też zawsze czekają na polecenia i nie mogą rozpocząć komunikacji? powiedziałeś, że telefon prosi aplet regularnie: "Czy jest coś nowego, co mogę dla ciebie zrobić?" (** ta sama aplikacja, która jest napisana przy użyciu SEEK dla biblioteki Android? **) i aplet na SIM odpowiada na to. więc karta SIM jest jeszcze pasywna. Czyż nie? – Jean