Có thể có hai loại applet khác nhau hiện có trên thẻ SIM của bạn.
applet Common
applet Common viết bằng JavaCard đồng bằng. Đây là loại applet mà bạn quen thuộc từ thế giới của các loại thẻ thông minh thông thường. Nó có phương thức process
và thẻ thông minh là chủ thể thụ động trong giao tiếp: ứng dụng của bạn gửi lệnh APDU và phản hồi thẻ.
Bạn có thể liên lạc với các ứng dụng này bằng cách sử dụng một nhóm thư viện Android đặc biệt có tên là SEEK dành cho Android. Hãy xem số tutorial này để tìm hiểu cách tạo ứng dụng điện thoại như vậy.
Bắt đầu từ cấp API 21 cũng có cách để liên lạc với SIM bằng cách sử dụng Telephony Manager. Tuy nhiên, có một trở ngại lớn: ứng dụng của bạn cần sự cho phép MODIFY_PHONE_STATE
, điều này chỉ có thể được cấp cho các ứng dụng hệ thống. Ứng dụng không phải là hệ thống, không được phép sử dụng nó.
SIM Toolkit Applet
thẻ
Một SIM là nhiều hơn chỉ là một thẻ thông minh phổ biến và viết một applet cho một thẻ SIM có thể phức tạp hơn nhiều so với một thẻ thông minh phổ biến nếu bạn muốn sử dụng tất cả các khả năng mà thẻ SIM cung cấp. Tôi khuyên bạn nên đọc this paper - đó là luận văn cử nhân của một ai đó, nhưng đó là tổng quan tốt nhất cho người mới bắt đầu tôi đã tìm thấy trên Internet. Tôi cũng khuyên bạn nên this video from the DefConn conference.
Vai trò của ứng dụng được tải trên thẻ SIM khác nhau: applet không còn là thực thể thụ động nữa. Điện thoại hỏi applet của bạn thường xuyên: "Tôi có thể làm gì mới cho bạn không?" và applet của bạn có thể trả lời: "Có, gửi tin nhắn SMS này," hoặc "Cho tôi biết thời gian là gì" vv Hơn nữa, applet của bạn có thể trở thành người nghe một số sự kiện: cuộc gọi đến, SMS đã nhận, khoảng thời gian trôi qua, v.v.Có, thẻ SIM có vẻ bị động từ quan điểm kỹ thuật, nhưng vai trò của nó thực tế là một thẻ đang hoạt động: đó là thẻ SIM gửi lệnh đến điện thoại.
Các lệnh này được gọi là lệnh "chủ động" hoặc lệnh Bộ công cụ ứng dụng SIM. Cấu trúc giống nhau - CLA INS P1 P2 Dữ liệu LC LE; ý nghĩa là khác.
Bạn có thể gửi chúng từ applet của bạn bằng cách sử dụng các lớp học trong một gói JavaCard đặc biệt được gọi là sim.toolkit
.
(SIM Application Toolkit là một tiêu chuẩn mà xác định các lệnh chủ động trong cùng một cách Global Platform xác định vòng đời của applet.)
Ví dụ về SIM Toolkit Applet:
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;
}
}
}
Vâng, bạn nên tìm hiểu Android - bạn sẽ cần nó để sử dụng thư viện SEEK. Câu hỏi của bạn rất rộng, hãy hỏi tôi bất kỳ chi tiết nào, nếu bạn muốn.
Cảm ơn vojta thân yêu. ** 1 - ** Vì vậy, _SEEK cho Android_ là một thư viện mà tôi sử dụng để viết applet cho bộ điện thoại di động của tôi (và không phải cho SIM/USIM) để liên lạc với các applet trên USIM/SIM, phải không? ** 2 - ** Bạn có bất kỳ ý tưởng gì là _SIM Toolkit Applicatin_ (hay còn gọi là STK)? – Jean
Lệnh Proactive có tương tự với lệnh APDU thông thường không? Tôi có nghĩa là họ có một tiêu đề bắt buộc 4 byte chứa CLA, INS, P1 và P2? hoặc chúng hoàn toàn khác nhau? – Jean
Trong phần 1, bạn nhấn mạnh rằng các thẻ thông minh thông thường là vai trò thụ động trong giao tiếp. đúng rồi. nhưng điều đó có nghĩa là thẻ USIM/SIM có thể có vai trò tích cực trong giao tiếp với điện thoại hay họ cũng chờ lệnh luôn và họ không thể bắt đầu liên lạc? bạn nói rằng điện thoại hỏi applet thường xuyên "Tôi có thể làm gì cho bạn không?" (** cùng một ứng dụng được viết bằng SEEK cho thư viện android? **) và applet trên SIM trả lời nó. vì vậy SIM vẫn thụ động. không phải nó? – Jean