1

我是新来的。我正在开发一个简单的 SMS 接收器,它可以捕获传入的文本消息,对它们进行一些逻辑处理,然后将它们转发到我的电子邮件以进行更永久的存储。广播接收器在我的清单中注册,当我在 Galaxy S3 上测试时,代码运行良好。但是,当我将它安装在 HTC One 上时,似乎从未触发过 Boradcast Receiver。只是想知道是否有其他人在 HTC 上遇到过这个问题,以及是否有任何建议的行动方案。令人沮丧的是它适用于我的三星,但不适用于 HTC。

注意:我已经尝试了所有在线常见的答案(提高优先级,确保所有权限都在清单中,在活动中尝试过,等等)。catlog 似乎也没有帮助。如果我在 onReceive() 方法的开头设置了一个断点或在那里烤面包,那么这两个代码点都不会在 HTC 上命中。

这是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sms.forward"
    android:versionCode="1"
    android:versionName="1.1" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
    <uses-permission android:name="android.permission.PERSISTENT_ACTIVITY" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Light" >
        <service android:name=".SecureMessagesActivity" />  
        <receiver android:name="com.android.upsync.SmsReceiver" android:exported="true" android:permission="android.permission.BROADCAST_SMS"> 
            <intent-filter android:priority="2147483647" > 
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>                    
                <category android:name="android.intent.category.DEFAULT"></category>                                    
            </intent-filter>
        </receiver>
    </application>
</manifest>

和我接收它的代码:

    @Override
        public void onReceive(Context context, Intent intent)
        {   

            Bundle extras = intent.getExtras();        
            String messageBody = "";
            if ( extras != null )
            {
                // Get received SMS array
                Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );

                for ( int i = 0; i < smsExtra.length; ++i )
                {
                    SmsMessage  sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);
                    messageBody = sms.getMessageBody();
                }           

                ForwardToEmail(messageBody);
                extras = null;
                messageBody = null;
            }            
                // Display SMS message
    }

这在我的三星上也很有效,但在 HTC 上完全不行。我还检查了手机上的其他 SMS 应用程序(例如 gosms pro 等)。我在那里看不到任何具有更高优先级的东西(好吧,我现在作弊并将我的放在尽可能高的位置 - 通常只有 999)。任何见解或方向都会膨胀:)。

4

2 回答 2

0

由于 Android 3.1BroadcastReceivers在您的包中的组件启动之前不会注册到系统。

因此,您需要创建一个Activity将在安装时启动的。启动此“组件”将注册您声明的清单BroadcastReceivers

于 2013-10-02T13:55:25.200 回答
0

到以前的答案......你可以在这里看到https://stackoverflow.com/questions/19565172/the-different-behavior-of-the-service-program-on-the-htc-one-evo-3d-and -samsu可以避免启动Activity来启动BroadcastReceiver。我看到它不依赖于 Android 版本,但显然它确实可以在不同的设备上运行,如 HTC 和三星......

于 2013-10-24T13:06:36.587 回答