我无法在HTC one上的Android 4.1.3上使用短信广播接收器
我是新来的。我正在开发一个简单的短信接收器,它可以捕获传入的短信,对它们进行一些逻辑处理,然后将它们转发到我的电子邮件中,以获得更持久的存储。广播接收器注册在我的清单中,当我在Galaxy S3上测试时,代码运行良好。然而,当我将其安装在HTC One上时,Boradcast接收器似乎从未启动过。只是想知道是否有其他人在HTC上遇到过这种情况,以及是否有任何行动建议。令人沮丧的是,它可以在我的三星上运行,但在HTC上却不行 注: 我已经尝试了所有常见的在线答案,增加优先级,确保所有权限都在清单中,并在活动中尝试过,等等。。catlog似乎也没有什么帮助。如果我在onReceive方法的开始处设置了一个断点,或者在那里制作toast,那么HTC上的任何代码点都不会命中 这是我的舱单:我无法在HTC one上的Android 4.1.3上使用短信广播接收器,android,broadcastreceiver,sms,Android,Broadcastreceiver,Sms,我是新来的。我正在开发一个简单的短信接收器,它可以捕获传入的短信,对它们进行一些逻辑处理,然后将它们转发到我的电子邮件中,以获得更持久的存储。广播接收器注册在我的清单中,当我在Galaxy S3上测试时,代码运行良好。然而,当我将其安装在HTC One上时,Boradcast接收器似乎从未启动过。只是想知道是否有其他人在HTC上遇到过这种情况,以及是否有任何行动建议。令人沮丧的是,它可以在我的三星上运行,但在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处于活动状态,我是否必须运行活动?否,这意味着您必须在安装应用程序后仅启动一次活动。这会导致系统激活清单中的广播接收器,因此您只需启动一次活动,无需任何背景组件。非常感谢你的帮助。今天下班后我要试一下,看看能不能把它用上。它很有魅力。谢谢,伊恩,最后一个问题。在安卓系统中,一旦注册了广播收视器,它会重新启动还是需要再次打开应用程序才能启动?