淺析Android手機(jī)衛(wèi)士sim卡綁定
讀取sim卡的序列號(hào),保存起來,一旦sim發(fā)生變更了,認(rèn)為是小偷的sim卡,發(fā)出警告
讀取sim卡序列號(hào)
獲取TelephonyManager對(duì)象,通過getSystemService(TELEPHONY_SERVICE)
調(diào)用TelephonyManager對(duì)象的getSimSerialNumber()方法,得到String類型的序列號(hào)
把序列號(hào)保存在SharedPreences里面
需要加權(quán)限 android.permission.READ_PHONE_STATE
檢測(cè)sim卡是否變更
使用廣播接收者,監(jiān)聽手機(jī)的開機(jī)廣播
新建一個(gè)包 xxx.receiver,新建一個(gè)類BootCompleteReceiver.java
清單文件注冊(cè)一下,添加<receiver>節(jié)點(diǎn),設(shè)置名稱android:name=”xxx”
添加意圖過濾器<intent-filter>節(jié)點(diǎn)
添加動(dòng)作<action/>節(jié)點(diǎn),設(shè)置監(jiān)聽動(dòng)作名稱android.intent.action.BOOT_COMPLETED
在BootCompleteReceiver類里面的onReceive()方法里,接收到廣播,讀取當(dāng)前的sim卡序列號(hào),比較之前保存的sim卡序列號(hào),如果不一樣就發(fā)送短信給安全號(hào)碼
監(jiān)聽開機(jī)啟動(dòng)需要權(quán)限 android:perission.RECEIVE_BOOT_COMPLETED
BootCompleteReceiver.java
package com.qingguow.mobilesafe.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.telephony.TelephonyManager; import android.widget.Toast; public class BootCompleteReceiver extends BroadcastReceiver { private TelephonyManager tm; private SharedPreferences sp; @Override public void onReceive(Context cotext, Intent arg1) { sp=cotext.getSharedPreferences("config", Context.MODE_PRIVATE); //讀取當(dāng)前的sim卡序列號(hào) tm=(TelephonyManager) cotext.getSystemService(Context.TELEPHONY_SERVICE); String relSim=tm.getSimSerialNumber(); //讀取之前保存的 String saveSim=sp.getString("sim", ""); //判斷后發(fā)短信 if(saveSim.equals(relSim)){ }else{ //發(fā)送報(bào)警短息給安全號(hào)碼 System.out.println("sim卡變更了"); Toast.makeText(cotext, "sim卡變更了", 1).show(); } } }
SecGuide2Activity.java
package com.qingguow.mobilesafe; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import com.qingguow.mobilesafe.ui.SettingItemView; public class SecGuide2Activity extends BaseSecGuideActivity { private SettingItemView siv_sim; private SharedPreferences sp; private TelephonyManager telephonyManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lost_find2); siv_sim = (SettingItemView) findViewById(R.id.siv_sim); sp = getSharedPreferences("config", MODE_PRIVATE); telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); // 根據(jù)保存的數(shù)據(jù)設(shè)置狀態(tài) String sim = sp.getString("sim", ""); if (TextUtils.isEmpty(sim)) { siv_sim.setChecked(false); } else { siv_sim.setChecked(true); } // 綁定sim卡 siv_sim.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String sim = telephonyManager.getSimSerialNumber(); Editor editor = sp.edit(); String simSp = sp.getString("sim", ""); if (TextUtils.isEmpty(simSp)) { siv_sim.setChecked(true); editor.putString("sim", sim); } else { siv_sim.setChecked(false); editor.putString("sim", ""); } editor.commit(); } }); } public void nextStep(View v) { showNext(); } public void preStep(View v) { showPre(); } @Override public void showNext() { Intent intent = new Intent(this, SecGuide3Activity.class); startActivity(intent); finish(); } @Override public void showPre() { Intent intent = new Intent(this, SecGuide1Activity.class); startActivity(intent); finish(); } }
- Android讀取用戶號(hào)碼,手機(jī)串號(hào),SIM卡序列號(hào)的實(shí)現(xiàn)代碼
- Android獲取手機(jī)通訊錄、sim卡聯(lián)系人及調(diào)用撥號(hào)界面方法
- android監(jiān)控sim卡有沒有服務(wù)示例(sim卡管理)
- Android獲取手機(jī)SIM卡運(yùn)營商信息的方法
- Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營商的實(shí)現(xiàn)代碼
- Android4.X中SIM卡信息初始化過程詳解
- Android 判斷SIM卡是中國移動(dòng)\中國聯(lián)通\中國電信(移動(dòng)運(yùn)營商)
- Android4.X讀取SIM卡短信和聯(lián)系人相關(guān)類實(shí)例分析
- Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營商詳解及實(shí)例
- Android獲取雙卡雙待手機(jī)的SIM卡信息示例代碼
相關(guān)文章
Android監(jiān)聽鍵盤狀態(tài)獲取鍵盤高度的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Android監(jiān)聽鍵盤狀態(tài)獲取鍵盤高度的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Android中使用socket通信實(shí)現(xiàn)消息推送的方法詳解
這篇文章主要介紹了Android中使用socket通信實(shí)現(xiàn)消息推送的方法,文中舉了一個(gè)消息發(fā)送端和一個(gè)消息接收端以及服務(wù)器端的例子來說明原理并且展示了客戶端的實(shí)現(xiàn),需要的朋友可以參考下2016-04-04Android scheme 跳轉(zhuǎn)的設(shè)計(jì)與實(shí)現(xiàn)詳解
這篇文章主要介紹了Android scheme 跳轉(zhuǎn)的設(shè)計(jì)與實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Java實(shí)現(xiàn)Andriod帶看括弧的計(jì)算器代碼
這篇文章主要介紹了Java實(shí)現(xiàn)Andriod帶看括弧的計(jì)算器代碼的相關(guān)資料,需要的朋友可以參考下2016-03-03Android Compose衰減動(dòng)畫Animatable使用詳解
這篇文章主要為大家介紹了Android Compose衰減動(dòng)畫Animatable使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Android Studio和Gradle使用不同位置JDK的問題解決
這篇文章主要介紹了Android Studio和Gradle使用不同位置JDK的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03android 開發(fā)教程之日歷項(xiàng)目實(shí)踐(一)
決定開始學(xué)習(xí) Android 平臺(tái)下的軟件開發(fā),以日歷作為實(shí)踐項(xiàng)目,進(jìn)行一周后,基本完成,有需要的朋友可以參考下2013-01-01Android自定義GestureDetector實(shí)現(xiàn)手勢(shì)ImageView
這篇文章主要為大家詳細(xì)介紹了Android自定義GestureDetector實(shí)現(xiàn)手勢(shì)ImageView的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03