Android 截获短信

Android 截获短信,android,Android,所以我有一个应用程序,当收到来自特定电话号码的特定消息时,它应该会打电话。 该广播接收器在Android 4.0.3上的三星Galaxy Tab2上工作,但如果不需要打电话,Go SMS Pro将不再接收这些信息。 在三星Galaxy S2(Android 4.0.3)上运行该应用程序时,广播接收器似乎没有截获所有消息,Go SMS Pro工作正常。 我曾尝试使用“abortBroadcast”和“clearbortbroadcast”,但它们没有效果 以下是我的广播接收器的代码: public

所以我有一个应用程序,当收到来自特定电话号码的特定消息时,它应该会打电话。 该广播接收器在Android 4.0.3上的三星Galaxy Tab2上工作,但如果不需要打电话,Go SMS Pro将不再接收这些信息。 在三星Galaxy S2(Android 4.0.3)上运行该应用程序时,广播接收器似乎没有截获所有消息,Go SMS Pro工作正常。 我曾尝试使用“abortBroadcast”和“clearbortbroadcast”,但它们没有效果

以下是我的广播接收器的代码:

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”,则该应用程序似乎存在许多与其他应用程序冲突的问题。