我无法在HTC one上的Android 4.1.3上使用短信广播接收器

我无法在HTC one上的Android 4.1.3上使用短信广播接收器,android,broadcastreceiver,sms,Android,Broadcastreceiver,Sms,我是新来的。我正在开发一个简单的短信接收器,它可以捕获传入的短信,对它们进行一些逻辑处理,然后将它们转发到我的电子邮件中,以获得更持久的存储。广播接收器注册在我的清单中,当我在Galaxy S3上测试时,代码运行良好。然而,当我将其安装在HTC One上时,Boradcast接收器似乎从未启动过。只是想知道是否有其他人在HTC上遇到过这种情况,以及是否有任何行动建议。令人沮丧的是,它可以在我的三星上运行,但在HTC上却不行 注: 我已经尝试了所有常见的在线答案,增加优先级,确保所有权限都在清单中

我是新来的。我正在开发一个简单的短信接收器,它可以捕获传入的短信,对它们进行一些逻辑处理,然后将它们转发到我的电子邮件中,以获得更持久的存储。广播接收器注册在我的清单中,当我在Galaxy S3上测试时,代码运行良好。然而,当我将其安装在HTC One上时,Boradcast接收器似乎从未启动过。只是想知道是否有其他人在HTC上遇到过这种情况,以及是否有任何行动建议。令人沮丧的是,它可以在我的三星上运行,但在HTC上却不行

注: 我已经尝试了所有常见的在线答案,增加优先级,确保所有权限都在清单中,并在活动中尝试过,等等。。catlog似乎也没有什么帮助。如果我在onReceive方法的开始处设置了一个断点,或者在那里制作toast,那么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上根本不起作用。我还检查了手机上的其他短信应用程序,例如gosms pro等。我在手机上没有看到任何有更高优先级的应用程序。我现在作弊了,并将我的应用程序设置为可能的最高值——通常只有999。 任何洞察或指导都将是巨大的:.

因为Android 3.1广播接收器只有在您的软件包中的组件启动后才会注册到系统中


因此,您需要创建一个将在安装时启动的活动。启动此“组件”将把您的清单注册到上一个答案中。。。正如您在这里看到的,启动BroadcastReceiver可以避免启动活动。我看到它并不依赖于Android版本,但显然它确实可以在不同的设备上工作,比如HTC和三星

谢谢你的信息@Ion。我来自.net世界,所以Java/Android对我来说有点陌生。这是否意味着当我在手机上使用其他应用程序时,我不能在后台运行此接收器?要使BroadcastReceiver处于活动状态,我是否必须运行活动?否,这意味着您必须在安装应用程序后仅启动一次活动。这会导致系统激活清单中的广播接收器,因此您只需启动一次活动,无需任何背景组件。非常感谢你的帮助。今天下班后我要试一下,看看能不能把它用上。它很有魅力。谢谢,伊恩,最后一个问题。在安卓系统中,一旦注册了广播收视器,它会重新启动还是需要再次打开应用程序才能启动?