2012-10-08 82 views
1

我正试图应对短信在Android中接收功能。 我读了很多关于Stackoverflow和其他网站的相关话题,我尝试了一个非常简单的类,它简单地在控制台上打印了一条消息,并收到了消息,但我无法弄清楚它为什么不起作用。BroadcastReceiver onReceive未被触发

我看到了类似的问题,在过去没有得到答复(见Android - Broadcast Receiver not being fired

希望有人能够发现哪里还有我的代码的问题。

代码:

package com.storassa.android.smsapp; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 

public class SmsReceiver 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) { 
System.out.println("Intent recieved: " + intent.getAction()); 

if (intent.getAction().equals(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) { 
System.out.println("Message recieved: " + messages[0].getMessageBody()); 
     } 
    } 
} 
    } 
} 

和明显

<manifest package="com.storassa.android.smsapp" 
    android:versionCode="1" 
    android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-sdk android:minSdkVersion="6" android:targetSdkVersion="6"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 

    <application android:label="@string/app_name" android:permission="android.permission.RECEIVE_SMS"> 
     <receiver android:name="com.storassa.android.smsapp.SmsReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

回答

-1
//In on resume and on pause of actvities register the receiver and also in manifest 

    protected void onPause(){ 

     super.onPause(); 
    unregisterReceiver(SmsReceiver); 

    } 



     protected void onResume() 
{ 


      super.onResume(); 

      registerReceiver(SmsReceiver , 
       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

     } 


    private BroadcastReceiver SmsReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 

         } 


     }; 
+0

该代码如何帮助他?这与在AndroidManifest.xml文件中注册BroadcastReceiver相同。 并请解释代码,而不是只回答一些代码的问题。 – Darwind

1

我想你的代码,它的工作对我罚款。

你指的是该柱具有与setPriority设置为999,仍然广播问题都没有收到。

尝试优先设置为Integer.MAX_VALUE或者当XML应该是2147483647

一些短信应用程序将使用此Integer.MAX_VALUE的是它们的优先级,因此“吃”的所有消息。

如果它不能帮助将setPriority设置为Integer.MAX_VALUE或2147483647,那么请尝试卸载处理传入SMS的所有应用程序,并查看是否将SMS发送到您的应用程序。

如果这有帮助,那么它是已经安装的正在吃SMS的应用程序之一。

解决这个问题的方法是,始终将您的应用程序安装为第一个应用程序。通过这样做,您将永远是第一个接收短信广播的应用程序。

编辑:设置优先级为Integer.MAX_VALUE或2147483647是一个黑客,应该可能不能使用。 setPriority()方法只声明从-1000到1000的优先级。但是我自己在应用程序中使用它,但我只处理从特定数字接收到的特定SMS,所以我没有看到它的问题。当你还安装了具有高优先级,那么当前一个应用程序等应用程序,所以提高优先级就会开始工作

+0

感谢Darwind提供的建议。 我尝试使用Integer.MAX_VALUE没有任何结果。 我正在使用Android模拟器来检查代码。 现在我正在尝试一个目标,我会让你知道。 – sthor69

+0

尝试一个真正的目标,它似乎不工作,在代码不停止在我把第一个println放在断点处。顺便说一下,使用System.out.println,我应该在Eclipse的控制台窗口上看到打印的文本吗?我应该在手机上看到什么吗? – sthor69

+0

你如何发送短信到模拟器? 如果仿真器被调用类似5554:[你给出的仿真器的名称],那么从仿真器控件,你应该发送一条短信到5554. – Darwind

1

这是会发生的,我也有这个问题,很多时候,在一个应用程序我的首要任务是100,它没有工作,但当我将其更改为999时,它开始工作, 因此,尝试设置不同的和大的优先级,然后再次检查。

相关问题