gpt4 book ai didi

android - 如何在android中获取传入的短信?

转载 作者:行者123 更新时间:2023-11-30 02:11:08 26 4
gpt4 key购买 nike

我想在另一台设备发送短信时打印 toast 消息。我写了代码。但它不工作。请任何人帮助我。安卓版本:4.0.4主要 Activity :

public class MainActivity extends ActionBarActivity {
Button btnSendSMS;
EditText txtPhoneNo;
EditText txtMessage;
BroadcastReceiver receiver = new SmsReceiver();

@Override
protected void onStop() {
super.onStop();
unregisterReceiver(receiver);
}

@Override
protected void onStart() {
super.onStart();
IntentFilter intentFilter = new IntentFilter("some_string-to_call_receiver");
registerReceiver(receiver, intentFilter);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);
txtMessage = (EditText) findViewById(R.id.txtMessage);

sendBroadcast(new Intent("some_string-to_call_receiver"));

}
}

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sms" >
<uses-permission android:name="android.permission.SEND_SMS">
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>

    <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<receiver android:name=".SmsReceiver">
<intent-filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

</manifest>

短信接收者:

public class SmsReceiver   extends BroadcastReceiver {
public static String SERVER_SUCCESS_CODE = "";

// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();

public void onReceive(Context context, Intent intent) {

// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();

try {

if (bundle != null) {

final Object[] pdusObj = (Object[]) bundle.get("pdus");

for (int i = 0; i < pdusObj.length; i++) {

SmsMessage currentMessage = SmsMessage
.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage
.getDisplayOriginatingAddress();

String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
String[] split_one = message.split(":");
String ss = split_one[1].substring(0, 4);
if(ss.length()==4)
{
SERVER_SUCCESS_CODE=ss;
}

/*Log.i("SmsReceiver", "senderNum: " + senderNum
+ "; message: " + message);
*/
// Show Alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "
+ senderNum + ", message: " + message, duration);
toast.show();

}
}

}
catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" + e);

}
}
}

我如何获取传入的短信和 toast 打印!

最佳答案

这是我用来看短信的,从gits下载原始文件Android SMS Receive Listener实现 SMSReceivedListner 并添加 SMSReceiver.addSMSListner(this);

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;

import java.util.ArrayList;

/**
* @@author Chathura Wijesinghe <cdanasiri@gmail.com>
*
* <receiver android:name=".SMSReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
*/
public class SMSReceiver extends BroadcastReceiver {

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

private static ArrayList<SMSReceivedListner> smsListner = new ArrayList<SMSReceivedListner>();

@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
final Bundle extras = intent.getExtras();


if (action.equals(SMSReceiver.SMS_RECEIVED)) {
final boolean smsValid = extras != null;

if (smsValid) {
//Create SMSMessages from PDUs in the Bundle
final Object[] pdus = (Object[])extras.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

//Assemble
final ArrayList<Long> vibrations = new ArrayList<Long>();

for (SmsMessage message : messages) {
for (SMSReceivedListner smsReceivedListner : smsListner )
smsReceivedListner.message(message);
}
}
}
}

public static void addSMSListner(SMSReceivedListner listner){
smsListner.add(listner);
}

public static void removeSMSListner(SMSReceivedListner listner){
smsListner.remove(listner);
}

public interface SMSReceivedListner{
public void message(SmsMessage message);
}}

关于android - 如何在android中获取传入的短信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30070205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com