发布于 2016-03-04 07:18:37 | 184 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

Android移动端操作系统

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。


这篇文章介绍了android短信拦截的实现代码,有需要的朋友可以参考一下

短信拦截的实现主要是使用了广播接收者来实现。

BroadcastReceiver  广播接收者   必须指定要接收的广播类型。必须明确的指定action

 
广播:事件。
普通广播: 是异步的。会广播接收者同时接收,不能被中断
sendBroadcast()
有序广播: 是同步的。会根据广播接收的优先级进行接收,是可以中断   短信到来广播
sendOrderBroadcast()
priority的范围是:-1000 ~ 1000
如果有序广播明确的指定了广播接收者,他是无法被中断的。

代码实现如下:

1、MainActivity


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
 
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 + "给你发了以下内容: " + body);  

            if(address.equals("5558")){  
                abortBroadcast();  
                SmsManager smsManager = SmsManager.getDefault();  
                smsManager.sendTextMessage("5556",null,address +" 于  " + dateStr + "给你发了以下内容: " + body,null,null);  

            }  
        }  
    }  

}  


 

3、AndroidManifest.xml

需要在清单文件中注册上一下权限。(如果不注册是不会成功地拦截到短信的,在logcat中会以Warn的

级别告诉你你没有相应的权限...)
 
<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"/>  


-----------------------------------------------------其实上面就是使用了代码的方式来注册BroadcastReceiver-------------

其实还可以在AndroidManifest.xml注册receiver这个组件(但是我采用这个方式总是会出现内存泄露的错误,所以下面的代码仅供参考)
 
<receiver android:name=".SmsReceiver">  
            <intent-filter android:priority="1000">  
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
            </intent-filter>  
        </receiver>  



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务