Android 截获短信
所以我有一个应用程序,当收到来自特定电话号码的特定消息时,它应该会打电话。 该广播接收器在Android 4.0.3上的三星Galaxy Tab2上工作,但如果不需要打电话,Go SMS Pro将不再接收这些信息。 在三星Galaxy S2(Android 4.0.3)上运行该应用程序时,广播接收器似乎没有截获所有消息,Go SMS Pro工作正常。 我曾尝试使用“abortBroadcast”和“clearbortbroadcast”,但它们没有效果 以下是我的广播接收器的代码:Android 截获短信,android,Android,所以我有一个应用程序,当收到来自特定电话号码的特定消息时,它应该会打电话。 该广播接收器在Android 4.0.3上的三星Galaxy Tab2上工作,但如果不需要打电话,Go SMS Pro将不再接收这些信息。 在三星Galaxy S2(Android 4.0.3)上运行该应用程序时,广播接收器似乎没有截获所有消息,Go SMS Pro工作正常。 我曾尝试使用“abortBroadcast”和“clearbortbroadcast”,但它们没有效果 以下是我的广播接收器的代码: public
public class SMSReceiver extends BroadcastReceiver{
/** The Action fired by the Android-System when a SMS was received.
* We are using the Default Package-Visibility */
private static final String SMS_EXTRA_NAME = "pdus";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Message received", Toast.LENGTH_LONG).show();
StringBuilder sb = new StringBuilder();
sb.append("");
if(intent.getAction().equals(Consts.ACTION)) {
Bundle bundle = intent.getExtras();
if(bundle != null)
{
//Get received SMS array
Object[] smsExtra = (Object[]) bundle.get(SMS_EXTRA_NAME);
for ( int i=0; i < smsExtra.length; i++)
{
SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);
String body = sms.getMessageBody().toString();
String address = sms.getOriginatingAddress();
if(address.equals(Consts.COPCI_NUMBER)) {
sb.append(body);
}
}
}
if(sb.toString().equals(Consts.TRIGGER_MESSAGE))
{
Intent dial = new Intent(Intent.ACTION_CALL);
dial.setData(Uri.parse("tel: " + Consts.POLI_NUMBER));
dial.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(dial);
}
else {
}
}
}
公共类SMSReceiver扩展了BroadcastReceiver{
/**安卓系统在收到短信时触发的操作。
*我们使用默认的包可见性*/
专用静态最终字符串SMS_EXTRA_NAME=“pdus”;
@凌驾
公共void onReceive(上下文、意图){
Toast.makeText(上下文,“收到消息”,Toast.LENGTH_LONG.show();
StringBuilder sb=新的StringBuilder();
某人加上(“”);
if(intent.getAction().equals(Consts.ACTION)){
Bundle=intent.getExtras();
if(bundle!=null)
{
//获取接收到的SMS阵列
Object[]smsExtra=(Object[])bundle.get(SMS\u EXTRA\u NAME);
对于(int i=0;i
}
这是AndroidManifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.Parcare"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name="com.example.Parcare2.SMSReceiver" android:priority="100">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
您的应用程序是否有任何活动?如果没有,它将在安装后保持“停止状态”,并且您的
广播接收器将永远不会被调用。因此,我添加了一个空活动(按下后退时结束),现在所有设备上都会调用接收器。现在的问题是打电话的时间。当Go SMS Pro也截获信息时,电话会立即停止。为什么会这样?如果我从其他地方进行活动(例如,从空活动),电话会正确启动和执行。对不起,我不熟悉Go SMS Pro,也不完全理解您所描述的内容。当短信到达时,您正在开始一项活动。Go SMS Pro也可能正在启动一项活动,这可能是冲突的。您可以尝试将BroadcastReceiver
中的context.startActivity()
替换为context.getApplicationContext().startActivity()。为此,您需要将android:priority=“-100”
添加到
标记内的
。您在
标记上的优先级设置被忽略,应该删除。您可能需要使用优先级(可以是-1000到1000之间的任意数字)来查看是否有任何变化。如果您在Stackoverflow上搜索“Go SMS Pro”,则该应用程序似乎存在许多与其他应用程序冲突的问题。