安卓 獲取電話號碼併發送簡訊
阿新 • • 發佈:2019-02-10
今天寫了個小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,便能解決這個問題。