Androidプロジェクト:携帯電話セキュリティガード(6)--携帯電話防犯設置ガイド(二)
Androidプロジェクト:携帯電話セキュリティガード(6)--携帯電話防犯設置ガイド(二)
1紹介
前の記事では、セットアップウィザードのインタフェースとスイッチングロジックについて説明しましたが、今日は各インタフェースの後ろにあるコードロジックを見てみましょう.主な知識は次のとおりです.携帯電話simカードシリアル番号 を読み取る携帯電話の再起動が完了した放送を傍受する 携帯電話の通信録 を読み取る
プロジェクトに関する記事については、以下を参照してください. Androidプロジェクト:携帯電話セキュリティガード(1)-フラッシュ画面 Androidプロジェクト:携帯電話セキュリティガード(2)-バージョンアップ Androidプロジェクト:携帯電話セキュリティガード(3)-メインインタフェースレイアウト Androidプロジェクト:携帯電話セキュリティガード(4)-カスタム(組み合わせ)コントロール、属性 Androidプロジェクト:携帯電話セキュリティガード(5)-カスタム弾窓 Androidプロジェクト:携帯電話セキュリティガード(6)-携帯電話防犯設置ガイド プロジェクトのソースアドレス(リアルタイム更新):https://github.com/xwdoor/MobileSafe
2携帯SIMカードのシリアル番号を読み取る
simカードのシリアル番号を読み込み、SharedPreferencesで保存します.次はコードです.
それだけで、システムは間違っています:
simカードをバインドした後、次に必要なのは、携帯電話の起動が完了するたびに、携帯電話のsimカードが変化しているかどうかを検出し、ブロードキャスト受信機BootCompleteReceiverを作成し、BroadcastReceiverから継承することです.
もちろん、この時点ではコードの処理ロジックは追加されておらず、ログを出力するだけです.なお、ブロードキャストを受信するには、
4携帯電話のアドレス帳を読み取る
システムのContentProviderにアクセスして通信録を読み取ると、システムにはraw_contacts,data,mimetypes,私たちの大まかな考え方は: raw_を読み込むcontacts、contact_を取得id contact_によるid,dataから具体情報(名前/電話)data 1,mimetype_を読み出すid mimetype_によるとid,mimetypesから特定のタイプ を調べる
それだけで、システムはエラーを報告します:
今日の知識点は役に立つと思います.システムが提供するサービスを使っています.これらのサービスは一般的にアクセス権が必要です.だから、アクセス権を加えることを忘れないでください.私も何度も忘れました.覚えておいてください.
プロジェクトに関する記事については、以下を参照してください. Androidプロジェクト:携帯電話セキュリティガード(1)-フラッシュ画面 Androidプロジェクト:携帯電話セキュリティガード(2)-バージョンアップ Androidプロジェクト:携帯電話セキュリティガード(3)-メインインタフェースレイアウト Androidプロジェクト:携帯電話セキュリティガード(4)-カスタム(組み合わせ)コントロール、属性 Androidプロジェクト:携帯電話セキュリティガード(5)-カスタム弾窓 Androidプロジェクト:携帯電話セキュリティガード(6)-携帯電話防犯設置ガイド プロジェクトのソースアドレス(リアルタイム更新):https://github.com/xwdoor/MobileSafe
1紹介
前の記事では、セットアップウィザードのインタフェースとスイッチングロジックについて説明しましたが、今日は各インタフェースの後ろにあるコードロジックを見てみましょう.主な知識は次のとおりです.
プロジェクトに関する記事については、以下を参照してください.
2携帯SIMカードのシリアル番号を読み取る
simカードのシリアル番号を読み込み、SharedPreferencesで保存します.次はコードです.
//
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
// sim
String simSerialNumber = tm.getSimSerialNumber();
それだけで、システムは間違っています:
java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10053 nor current process has android.permission.READ_PHONE_STATE.
これは権限を追加していない結果、携帯電話の状態を読み取る権限を追加する必要があります:<uses-permission android:name="android.permission.READ_PHONE_STATE" />
3携帯電話の再起動が完了したReceiver放送を傍受するsimカードをバインドした後、次に必要なのは、携帯電話の起動が完了するたびに、携帯電話のsimカードが変化しているかどうかを検出し、ブロードキャスト受信機BootCompleteReceiverを作成し、BroadcastReceiverから継承することです.
public class BootCompleteReceiver extends BroadcastReceiver {
public BootCompleteReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String serialNumber = PrefUtils.getString(BaseActivity.PREF_BIND_SIM,"",context);
if(!TextUtils.isEmpty(serialNumber)){
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String simSerialNumber = tm.getSimSerialNumber();
if(serialNumber.equals(simSerialNumber)){
Log.i(BaseActivity.TAG_LOG," ");
}else {
Log.i(BaseActivity.TAG_LOG,"SIM , ");
}
}
}
}
もちろん、この時点ではコードの処理ロジックは追加されておらず、ログを出力するだけです.なお、ブロードキャストを受信するには、
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
の作成が完了した後、ブロードキャスト受信機を登録する必要があり、そのactionは:BOOT_である.COMPLETED、コードは以下の通り:
<receiver android:name=".receiver.BootCompleteReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
4携帯電話のアドレス帳を読み取る
システムのContentProviderにアクセスして通信録を読み取ると、システムにはraw_contacts,data,mimetypes,私たちの大まかな考え方は:
/** * */
private ArrayList<HashMap<String, String>> readContacts() {
// raw_contacts, data, mimetypes
// 1. raw_contacts, contact_id
// 2. contact_id, data ( / ) data1, mimetype_id
// 3. mimetype_id, mimetypes
// 1. raw_contacts, contact_id
Cursor rawCursor = getContentResolver().query(Uri.parse("content://com.android.contacts/raw_contacts"),
new String[]{"contact_id"}, null, null, null);
ArrayList<HashMap<String, String>> listContacts = new ArrayList<>();
if (rawCursor != null) {
while (rawCursor.moveToNext()) {
String contactId = rawCursor.getString(rawCursor.getColumnIndex("contact_id"));
// 2. contact_id, data ( / ) data1, mimetype_id
// data , view_data , data mimetypes
Cursor cursor = getContentResolver().query(Uri.parse("content://com.android.contacts/data"),
new String[]{"data1", "mimetype"}, "raw_contact_id=?", new String[]{contactId}, null);
HashMap<String, String> map = new HashMap<>();
if (cursor != null) {
while (cursor.moveToNext()) {
String data = cursor.getString(cursor.getColumnIndex("data1"));
String mimetype = cursor.getString(cursor.getColumnIndex("mimetype"));
if ("vnd.android.cursor.item/name".equals(mimetype)) {
//
map.put("name", data);
} else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
//
map.put("phone", data);
}
}
cursor.close();
if (!TextUtils.isEmpty(map.get("name")) && !TextUtils.isEmpty(map.get("phone"))) {//
listContacts.add(map);
}
}
}
rawCursor.close();
}
return listContacts;
}
それだけで、システムはエラーを報告します:
java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 requires android.permission.READ_CONTACTS, or grantUriPermission().
追加権限が必要です:<uses-permission android:name="android.permission.READ_CONTACTS"/>
5まとめ今日の知識点は役に立つと思います.システムが提供するサービスを使っています.これらのサービスは一般的にアクセス権が必要です.だから、アクセス権を加えることを忘れないでください.私も何度も忘れました.覚えておいてください.
プロジェクトに関する記事については、以下を参照してください.