<pre id="p1pz5"><delect id="p1pz5"></delect></pre>
<output id="p1pz5"><delect id="p1pz5"><listing id="p1pz5"></listing></delect></output>

<p id="p1pz5"></p>

<pre id="p1pz5"></pre>

<p id="p1pz5"></p>
<pre id="p1pz5"><output id="p1pz5"></output></pre>
<pre id="p1pz5"><output id="p1pz5"><delect id="p1pz5"></delect></output></pre><pre id="p1pz5"></pre>

<p id="p1pz5"><output id="p1pz5"></output></p>

<p id="p1pz5"><output id="p1pz5"><menuitem id="p1pz5"></menuitem></output></p>

<output id="p1pz5"></output>
<pre id="p1pz5"><output id="p1pz5"></output></pre>

<p id="p1pz5"><delect id="p1pz5"><menuitem id="p1pz5"></menuitem></delect></p>

<p id="p1pz5"></p>
<p id="p1pz5"><output id="p1pz5"></output></p>
<p id="p1pz5"><output id="p1pz5"></output></p>

<p id="p1pz5"><output id="p1pz5"></output></p>
<p id="p1pz5"></p>

<output id="p1pz5"><delect id="p1pz5"></delect></output>

<p id="p1pz5"></p>

<p id="p1pz5"></p>

<p id="p1pz5"></p>
<p id="p1pz5"><delect id="p1pz5"><address id="p1pz5"></address></delect></p>

<pre id="p1pz5"></pre>

<pre id="p1pz5"><output id="p1pz5"><delect id="p1pz5"></delect></output></pre>

畢業設計網
JSP,JAVA | python | nodejs | android,安卓 | PHP | 微信小程序 |

安卓Android防盜程序簡單實現

學習要點總結:

1、 關于SharedPreferences
在android平臺下用于保存數據有三種方式,1、SQLite 2、

SharedPreferences 3、File
SharedPreferences是將數據保存在一個xml文件中,并且是以Map的形式保

存,一個Key對應一個Value   但獲取某一個Key的時候,都會有一個默認值

,這個默認值是在xml不存在這個key值的時候使用
a) 獲得SharedPreferences :
獲得SharedPreferences是通過上下文(Context)中的getSharedPreferences

方法獲得。
    SharedPreferences  sp = this.getSharedPreferences("data",

MODE_WORLD_READABLE);
   第一個參數是指定xml文件的名字,當不存在的時候就會創建它。第二個

參數是獲得這個SharedPreferences的模式,一共有四種模式:MODE_APPEND

、MODE_PRIVATE、  MODE_WORLD_READABLE 、MODE_WORLD_WRITEABLE
b) 從SharedPreferences中取值
通過sp.getXXX的方式可以獲得對應key的值,在getXXX的時候,需要指定一

個默認的值,當key值不存在的時候使用
c) 往SharedPreferences中設值
需要用到Editor
 Editor editor = sp.edit();
獲得了Editor之后,才能對SharedPreferences進行寫
editor.putXXX(“key”,value)
最后需要注意的一點是別忘了commit
e) Xml文件存放的位置位于data/data/包名/shared_prefs/xxx.xml
2、 關于AlertDialog
創建AlertDialog需要用到AlertDialog.Builder這個對象,對這個Builder

做相應的設置,可以使AlertDialog有不同的展現
 AlertDialog.Builder builder = new AlertDialog.Builder(this)
 builder.setTitle(“”);
a) 創建普通的AlertDialog
builder.setNegativeButton("xxx", new

DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which)
   }
  });
一共有三種Button:NegativeButton,PositiveButton,NeutralButton
這三種Button默認的實現了點擊之后消失AlertDialog
b) 創建自定義布局的AlertDialog
創建自定義布局的AlertDialog,需要一個布局文件,我們所需要做的就是

將這個布局文件變成一個View對象,再將這個View對象設置到Builder里面


將布局文件變成一個View對象,需要用到LayoutInflater這個對象中的

inflate方法
LayoutInflater inflater = LayoutInflater.from(this);
 View view = inflater.inflate(R.layout.showpassworddialog, null);
之后再builder.setView(view)就可以將自定義的布局文件放到Dialog里面

去了
在這個自定義的布局文件中,我們也是可以取到里面定義的控件,通過

view.findViewById() 就可以找到自定義布局文件中的相應控件,之后就可

以設置或者做事件的監聽

AlertDialog dialog = builder.create();
dialog.show();
3、 TelephonyManager
獲取SIM卡信息。在SIM卡中并沒有保存用戶的手機,區分每一張SIM是通過

IMSI碼。在運營商的數據庫中存在手機號碼和IMSI碼的映射,所以手機是通

過發送IMSI碼到運營商的一端,獲得自己的手機號碼。
TelephonyManager tm = (TelephonyManager) this.getSystemService

(Context.TELEPHONY_SERVICE);

 //獲取手機號碼    一般是為空的,因為運營商沒有基本沒有把本機電話

保存在SIM卡中   標識每一張SIM卡是通過IMSI碼(tm.getSubscriberId()).
     //在運營商的數據庫表中有IMSI碼與電話號碼的映射。所以,手機是

通過發送IMSI碼到運營商一端,才獲得自己的手機號碼
     String phonenumber = tm.getLine1Number();
     //獲得每一張電話卡的唯一標識   IMIS碼
     String subscriberid = tm.getSubscriberId();

        //獲取手機的IMEI號碼   國際移動設備識別碼是區別移動設備的

標志
     String deviceId = tm.getDeviceId();
     //獲取國際的國家編碼  中國:cn
     String networkiso = tm.getNetworkCountryIso();
     //獲取網絡的MCC+MNC編碼   中國電信天翼460003   中國移動46000
     String networkoper = tm.getNetworkOperator();
     //獲取網絡的MCC+MNC編碼對應的名稱   中國電信:China Telecom 

中國移動:China Mobile
     String networkoper_name = tm.getNetworkOperatorName();
     //獲取SIM的串號   串號是標識物理設備的
     String simnumber = tm.getSimSerialNumber();
 
     //獲取網絡的類型
     int phonetype = tm.getPhoneType();
     String phonetype_str = "null";
     switch(phonetype){
       case TelephonyManager.PHONE_TYPE_GSM:
        phonetype_str ="GSM網絡";
        break;
       case TelephonyManager.PHONE_TYPE_CDMA:
        phonetype_str ="CDMA網絡";
           break;
       case TelephonyManager.PHONE_TYPE_NONE:
        phonetype_str ="未識別網絡";
           break;
     }
    
     int simstate = tm.getSimState();
     String simstatestr = "null";
     switch(simstate ){
       case TelephonyManager.SIM_STATE_UNKNOWN:
        simstatestr = "未知狀態";
        break;
       case TelephonyManager.SIM_STATE_ABSENT:
        simstatestr = "未插卡";
        break;
       case TelephonyManager.SIM_STATE_PIN_REQUIRED:
        simstatestr = "需要PIN密碼解鎖";
           break;
       case TelephonyManager.SIM_STATE_PUK_REQUIRED:
        simstatestr = "需要PUK密碼解鎖";
           break;
       case TelephonyManager.SIM_STATE_READY:
        simstatestr = "就緒";
           break;
       case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
        simstatestr = "SIM已經被鎖住";
           break;
     }

   讀取這些數據需要權限
<uses-permission

android:name="android.permission.READ_PHONE_STATE"></uses-

permission>
4、廣播的使用
在android系統中,廣播運用的很廣泛。許多系統的事件都喜歡把它封裝成

廣播。比如手機的電量改變,手機開機完畢,手機接收到短信等等。那么廣

播到底是什么呢?廣播通俗的理解應該是android系統在整個手機內部發送

的一個消息。比如手機開機完畢,當手機開機完成之后,就會在整個手機的

內部發送一個“啟動完畢”的消息。如果有一個廣播接收著,它感興趣的消

息是“啟動完畢”,這時候,這個廣播接收者就會有所操作,比如啟動某個

程序,這樣就可以實現開機啟動程序的功能了。
系統中提供了許許多多的廣播,也可以用戶自定義廣播。
廣播接收者,對感興趣的消息進行捕捉,一旦有這個消息出現,就進行相應

的操作。
廣播接收者比較重要的地方分為兩點,1、 廣播接收者的注冊   2、

<intent-filter>
1、 廣播接收者的注冊
a) 代碼中注冊       臨時有效
i. 注冊
ii. 注銷
b) Manifest文件中注冊     永久有效,直到這個程序被卸載
2、 <intent-filter>
a) 指定這個廣播接收者所感興趣的廣播,通過<action>標簽指定

開機完畢時發送的廣播:
<receiver android:name=".BootCompleteReceiver">
  <intent-filter>
  <action android:name="android.intent.action.BOOT_COMPLETED"/>
  </intent-filter>
</receiver>

接收短信時發送的廣播
<receiver android:name=".ReceiveSMSReceiver">
<intent-filter>
 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
在接收某些廣播的時候需要權限,例如接收短信的廣播就需要
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
 <uses-permission android:name="android.permission.READ_SMS"/>

4、 SmsManager
1、發送短信
SmsManager smsManager = SmsManager.getDefault();
   // 按照一條短信,最大容量拆分成多條短信
   List<String> divideContents = smsManager.divideMessage("手機

IMSI碼為" + safedSubscriberid + " 已被更換SIM卡,更換的SIM卡IMSI碼

為:" + subscriberid);
   for (String text : divideContents) {
       smsManager.sendTextMessage(savedNumber, null, text, null,

null);
   }
-- destinationAddress:目標電話號碼
-- scAddress:短信中心號碼,測試可以不填
-- text: 短信內容
-- sentIntent:發送 -->中國移動 --> 中國移動發送失敗 --> 返回發送

成功或失敗信號 --> 后續處理   即,這個意圖包裝了短信發送狀態的信息
-- deliveryIntent: 發送 -->中國移動 --> 中國移動發送成功 --> 返回

對方是否收到這個信息 --> 后續處理  即:這個意圖包裝了短信是否被對

方收到的狀態信息(供應商已經發送成功,但是對方沒有收到)。
 聲明短信發送權限
     * AndroidManifest.xml
       <uses-permission

android:name="android.permission.SEND_SMS"/>
3、 讀取短信內容

接收短信時發送的廣播
<receiver android:name=".ReceiveSMSReceiver">
<intent-filter>
 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
在接收某些廣播的時候需要權限,例如接收短信的廣播就需要
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
 <uses-permission android:name="android.permission.READ_SMS"/>

當短信到來的時候,系統會將短信的內容封裝成pdu的格式,然后放到

intent里面。所以要獲得短信的內容,就通過intent,將puds拿出來就可以

了,它返回的是Object數組
Object[] messages = (Object[]) intent.getSerializableExtra

("pdus");
         創建一個二維字節數組
  byte[][] pduObjs = new byte[messages.length][];
  for (int i = 0; i < messages.length; i++)  {
   pduObjs[i] = (byte[]) messages[i];
  }
  byte[][] pdus = new byte[pduObjs.length][];
  int pduCount = pdus.length;
  SmsMessage[] msgs = new SmsMessage[pduCount];
  for (int i = 0; i < pduCount; i++){
   pdus[i] = pduObjs[i];
   msgs[i] = SmsMessage.createFromPdu(pdus[i]);
  }
  return msgs;
 }
一條短信就是一個SmsMessage ,這個SmsMessage可以通過一個byte[]來創建

 

 

 

 

 

 

 


小結:
廣播接收者,對接收短信進行監聽,當手機接收到一條短信的時候,系統會

發出一條廣播,被廣播接收者接收。別忘了要將這個廣播接收者注冊
在onReceive方法中有一個參數intent,當攔截這條短信的時候,所有的短

信信息都會封裝在這個intent中,我們可以通過這個intent來獲取短信信息

短信封裝的形式pdu
Object[] object = (Object[]) intent.getSerializableExtra("pdus");

一條短信就是一個SmsMessage對象,一個SmsMessage對象通過一個byte[]來

創建,一個byte[]數組就是一個object對象

Object[]
Object[0]:   存在的形式  byte[]                          一條短信
Object[1]
Object[2]
Object[3]

所以Object[]   對應著一個byte[][]的二維數組
byte[][] pdus = new byte[object.length][];
pdus[i] = (byte[]) object[i];
SmsMessage message = SmsMessage.createFromPdu(pdus[i]);

獲得來短信號碼:
String oriAddress = msgs[i].getDisplayOriginatingAddress();
獲得來短信的內容:
String body = msgs[i].getDisplayMessageBody();

完善:
將接收短信和發送短信改成后臺操作,不在機子上有相關的顯示
通過gps,發送的短信內容包含位置信息安卓程序

以上是一部分介紹,如需要完整的資料或者如不符合您的要求,請聯系技術人員qq:242219979咨詢

上一篇:安卓Android軟件管理器
下一篇:Android安卓網絡手機相冊管理系統


版權所有 畢業設計網聯系qq:242219979 © 2007-2022

蝴蝶中文综合娱乐网

<pre id="p1pz5"><delect id="p1pz5"></delect></pre>
<output id="p1pz5"><delect id="p1pz5"><listing id="p1pz5"></listing></delect></output>

<p id="p1pz5"></p>

<pre id="p1pz5"></pre>

<p id="p1pz5"></p>
<pre id="p1pz5"><output id="p1pz5"></output></pre>
<pre id="p1pz5"><output id="p1pz5"><delect id="p1pz5"></delect></output></pre><pre id="p1pz5"></pre>

<p id="p1pz5"><output id="p1pz5"></output></p>

<p id="p1pz5"><output id="p1pz5"><menuitem id="p1pz5"></menuitem></output></p>

<output id="p1pz5"></output>
<pre id="p1pz5"><output id="p1pz5"></output></pre>

<p id="p1pz5"><delect id="p1pz5"><menuitem id="p1pz5"></menuitem></delect></p>

<p id="p1pz5"></p>
<p id="p1pz5"><output id="p1pz5"></output></p>
<p id="p1pz5"><output id="p1pz5"></output></p>

<p id="p1pz5"><output id="p1pz5"></output></p>
<p id="p1pz5"></p>

<output id="p1pz5"><delect id="p1pz5"></delect></output>

<p id="p1pz5"></p>

<p id="p1pz5"></p>

<p id="p1pz5"></p>
<p id="p1pz5"><delect id="p1pz5"><address id="p1pz5"></address></delect></p>

<pre id="p1pz5"></pre>

<pre id="p1pz5"><output id="p1pz5"><delect id="p1pz5"></delect></output></pre>