1. 程式人生 > >安卓 獲取電話號碼併發送簡訊

安卓 獲取電話號碼併發送簡訊

今天寫了個小demo,通過設定一個安全號碼,並給其傳送簡訊。按照簡訊內容操作,能執行簡訊內容的操作。好了,廢話不多說。直接進入正題。
預覽效果

這裡寫圖片描述

給主頁面設定一個button xml裡面寫個button 給其設個id 或onClick;這裡就不貼程式碼了。

由於是點選一個button彈出一個對話方塊,所以在 activity裡,如果你設的是id,你就先需要得到id,然後給其設監聽事件。如果你設的是onClick,就給他寫個點選事件方法。本人寫的是onClick,程式碼如下:

package com.example.an_phonenumberdemo;

import android.app
.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony
.SmsManager; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import org.w3c.dom.Text; import java.util
.List; public class MainActivity extends AppCompatActivity { private SharedPreferences.Editor editor; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText= new EditText(MainActivity.this); //得到SharedPreferences SharedPreferences sp=getSharedPreferences("save", Context.MODE_PRIVATE); editor = sp.edit(); //取 String phone=sp.getString("number",""); editText.setText(phone); } public void savenumber(View view){ //顯示對話方塊 AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("請輸入安全號碼:"); //設定編輯框 builder.setView(editText); builder.setPositiveButton("儲存", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 獲取編輯框的號碼 String number= editText.getText().toString(); editor.putString("number",number); // //提交 editor.commit(); SmsManager smsManager=SmsManager.getDefault(); String manage="請執行以下操作:1:關機,2:響鈴"; List<String> list=smsManager.divideMessage(manage); for (String text:list){ PendingIntent pi=PendingIntent.getBroadcast(MainActivity.this,0,new Intent(),0); smsManager.sendTextMessage(editText.getText().toString(),null,text,pi,null); } Toast.makeText(MainActivity.this, "傳送成功", Toast.LENGTH_SHORT).show(); } });{ builder.show(); } } }

有一點就是因為要給安全號碼傳送簡訊,還要給安全號碼返回指令,所以為了避免之後要判斷是否是安全號碼接收的指令,所以可以先用SharedPreferences把安全號碼先存起來。別忘了配置傳送簡訊的許可權。

  <!--傳送簡訊的許可權-->
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

接下來就是接收簡訊了,程式碼如下:

package com.example.an_phonenumberdemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;

public class Receive extends BroadcastReceiver {
    private String body;
    @Override
    public void onReceive(Context context, Intent intent) {

        if("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())) {
            Log.i("test", "有簡訊進來了");
            //獲取簡訊的內容
            Bundle bundle = intent.getExtras();
            Object[] objects = (Object[]) bundle.get("pdus");

            SmsMessage[] smsMessages = new SmsMessage[objects.length];

            for (int i = 0; i < objects.length; i++) {
                smsMessages[i] = SmsMessage.createFromPdu((byte[]) objects[i]);
            }

            for (SmsMessage message : smsMessages) {
                String address = message.getDisplayOriginatingAddress();
                body = message.getDisplayMessageBody();
                Log.i("test", "傳送人:" + address);
                Log.i("test", "內容:" + body);

                if(body.equals("2")){
                       MediaPlayer mediaPlayer=MediaPlayer.create(context,R.raw.pianai);
                       mediaPlayer.setLooping(true);
                       mediaPlayer.start();
                }
            }
        }
    }
}

接收簡訊時需根據簡訊內容判斷,如果他回覆的是一,便執行關機操作……由於類似就做了響鈴的操作,響鈴操作需要在res下面建個raw檔案,把音訊檔案放進去。值得注意的是,現在手機的許可權越來越高了,可能執行不了這個操作,這是正常的,可以將手機root,便能解決這個問題。