2015-10-30 21 views
0

我正在写一个应用程序接收SMS数据信息,加密其内容并将其保存到数据库。为了实现它,我已经创建了一个服务与本地广播接收器如下:BroadcastReceiver在服务没有反应

public class SMMReceiverService extends Service { 

     private class SMMreceiver extends BroadcastReceiver { 

      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       Bundle extras = intent.getExtras(); 
       //call a method from service 
      } 

     } 

     private SMMreceiver smmReceiver; 
     private IntentFilter intentFilter; 

     @Override 
     public void onCreate(){ 
      super.onCreate(); 

      android.os.Debug.waitForDebugger(); 

      smmReceiver = new SMMreceiver(); 
      intentFilter = new IntentFilter(); 

      intentFilter.addAction("android.provider.Telephony.DATA_SMS_RECEIVED"); 
      intentFilter.addDataScheme("sms"); 
      intentFilter.addDataAuthority("localhost","8901"); 

      registerReceiver(smmReceiver, intentFilter); 


    } 
} 

服务正常启动,但SMMreceiver的的onReceive方法不会被调用。在清单中,我只声明我的服务如下:

<service 
     android:name=".Services.SMMReceiverService" 
     android:enabled="true" 
     android:exported="true" > 
    </service> 

也有所有必需的权限:

<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 

如何解决我在正确的方式问题吗?我会感谢您的帮助!

回答

4

好吧,你似乎有点回答你自己的问题。

“服务启动正常,但SMMreceiver的的onReceive方法不会被调用在清单中,我只声明我的服务如下:”

你也必须声明你的接收器在你的清单,你这样做?

+0

我认为,当接收机动态注册时,我不必声明它在清单。我还需要将接收器更改为静态并将其公开。 – Blady214