mad*_*adu 51 sms android broadcastreceiver android-intent
我一直试图让这个程序工作,但到目前为止没有运气.我无法找到我做错的地方.我不确定代码或调试是否有问题.
我正在尝试收到新短信到达时的通知.
这是我的计划:
package Technicaljar.SMSBroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SMSBroadcastReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SMSBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Intent recieved: " + intent.getAction());
if (intent.getAction() == SMS_RECEIVED) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
if (messages.length > -1) {
Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="Technicaljar.SMSBroadcastReceiver"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" >
<receiver android:name=".SMSBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我通过Telnet发送短信,我在logcat中看不到任何Intent收到的消息.这是我安装时的logcat.
D/AndroidRuntime( 478):
D/AndroidRuntime( 478): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
D/AndroidRuntime( 478): CheckJNI is ON
D/AndroidRuntime( 478): --- registering native functions ---
D/AndroidRuntime( 478): Shutting down VM
D/dalvikvm( 478): Debugger has detached; object registry had 1 entries
I/AndroidRuntime( 478): NOTE: attach of thread 'Binder Thread #3' failed
D/Mms:app ( 220): getSmsNewMessageNotificationInfo: count=14, first addr=12345, thread_id=4
D/dalvikvm( 151): GC_EXPLICIT freed 391 objects / 22552 bytes in 65ms
D/dalvikvm( 220): GC_EXPLICIT freed 926 objects / 44840 bytes in 73ms
Run Code Online (Sandbox Code Playgroud)
所以短信似乎是由模拟器接收的,但看起来没有意图发射.我在这做错了什么?安装后,我是否必须以某种方式"启动"此接收器?因为当我安装时,我得到了
[2010-11-07 21:24:41 - SMSBroadcastReceiver] No Launcher activity found!
[2010-11-07 21:24:41 - SMSBroadcastReceiver] The launch will only sync the application package on the device!
Run Code Online (Sandbox Code Playgroud)
所以我想知道这里有什么问题.
Com*_*are 70
android.provider.Telephony.SMS_RECEIVED
有一个资本T
,你的清单中没有.
请记住,此Intent
操作未记录在案.
小智 17
我尝试了你的代码,发现它无法正常工作.
我不得不改变
if (intent.getAction() == SMS_RECEIVED) {
Run Code Online (Sandbox Code Playgroud)
至
if (intent.getAction().equals(SMS_RECEIVED)) {
Run Code Online (Sandbox Code Playgroud)
现在它正在运作.这只是java检查相等性的问题.
另请注意,环聊应用程序目前会阻止我的BroadcastReceiver接收短信.在我的SMS BroadcastReceived开始被解雇之前,我不得不在环聊应用程序中禁用短信功能(设置 - >短信 - >打开短信).
编辑:似乎某些应用程序将在意图上abortBroadcast(),这将阻止其他应用程序接收意图.解决方案是增加标记中的android:priority
属性intent-filter
:
<receiver android:name="com.company.application.SMSBroadcastReceiver" >
<intent-filter android:priority="500">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在此处查看更多详细信息:在环聊2.0中启用SMS支持会破坏我的应用中的SMS_RECEIVED的BroadcastReceiver
归档时间: |
|
查看次数: |
92224 次 |
最近记录: |