广播接收器从犯规开始服务 [英] BroadcastReceiver doesnt start from service

查看:158
本文介绍了广播接收器从犯规开始服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要开始从服务一个BroadcastReceiver,它不工作,我也跟着一些教程,一切似乎是正确的,但它不是。

下面是我的code:

 公共类ServiceNotif延伸服务{
        smsReceiver接收机;
            私有静态最后的IntentFilter的IntentFilter =
                    新的IntentFilter(android.provider.Telephony.SMS_RECEIVED);        @覆盖
        公共无效的onCreate(){
            // TODO自动生成方法存根
            super.onCreate();
            Log.w(在服务质量上intrat,);
            Toast.makeText(getBaseContext(),
                    在服务质量上intrat
                    Toast.LENGTH_SHORT).show();
             在functia ASTA // DACA primesc联合国mesaj本身内部
接收器=新smsReceiver();
            registerReceiver(接收器,IntentFilter的);
        }        @覆盖
        公共无效的onDestroy(){
            // TODO自动生成方法存根
            super.onDestroy();
            unregisterReceiver(接收机);
        }        @覆盖
        公众的IBinder onBind(意向意图){
            返回mBinder;
        }        //这是从客户端接收的交互的对象。看到
        // RemoteService一个更完整的例子。
        私人最终的IBinder mBinder =新LocalBinder();         / **
         *为类客户端访问。因为我们总是知道这个服务
         *在同一进程中作为它的客户运行时,我们并不需要处理
         * IPC。
         * /
        公共类LocalBinder扩展粘结剂{
            ServiceNotif的getService(){
                返回ServiceNotif.this;
            }
        }
        @覆盖
        公众诠释onStartCommand(意向意图,诠释标志诠释startId){
            Log.i(本地服务,收到起始ID+ startId +:+意向);
            //我们希望该服务继续运行,直到它被明确
            //停止,因此返回粘​​。
            返回START_STICKY;
        }    }

为什么没有当我得到一个消息时,接收者被触发?

编辑:
我在我的日志还可以得到这样的:

  8月12日至9日:16:05.708:W / GAV3(1183):螺纹[GAThread,5,主]:服务不可用(code = 1),将重试。
8月12日至9日:16:05.718:I / GAV3(1183):螺纹[GAThread,5,主]:未找到活动的数据。
8月12日至9日:16:10.779:W / GAV3(1183):螺纹[服务重新连接,5,主]:服务不可用(code = 1),使用本地存储。


解决方案

  

为什么没有当我得到一个消息时,接收者被触发?


由于你没有初始化接收。登记前初始化它的onCreate()

  @覆盖
公共无效的onCreate(){
    super.onCreate();
    Log.w(在服务质量上intrat,);
    Toast.makeText(getBaseContext(),
            在服务质量上intrat
            Toast.LENGTH_SHORT).show();
     在functia ASTA // DACA primesc联合国mesaj本身内部
    接收器=新的广播接收器(); //初始化接收器
    registerReceiver(接收器,IntentFilter的);
}

编辑:

请确保您有正确的许可,在你的清单。

 <清单
    ...
    <使用许可权的android:NAME =android.permission.RECEIVE_SMS/>
    ...
< /清单>

I need to start a broadcastreceiver from a service and it's not working, i followed some tutorials and everything seems to be right but its not.

Here is my code:

    public class ServiceNotif extends Service{


        smsReceiver receiver;  
            private static final IntentFilter intentFilter = 
                    new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
            Log.w("A intrat in service"," ");
            Toast.makeText(getBaseContext(), 
                    "A intrat in service", 
                    Toast.LENGTH_SHORT).show();
             //daca primesc un mesaj se intra in functia asta
receiver = new smsReceiver();
            registerReceiver(receiver, intentFilter);
        }

        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            unregisterReceiver(receiver);
        }

        @Override
        public IBinder onBind(Intent intent) {
            return mBinder;
        }

        // This is the object that receives interactions from clients.  See
        // RemoteService for a more complete example.
        private final IBinder mBinder = new LocalBinder();

         /**
         * Class for clients to access.  Because we know this service always
         * runs in the same process as its clients, we don't need to deal with
         * IPC.
         */
        public class LocalBinder extends Binder {
            ServiceNotif getService() {
                return ServiceNotif.this;
            }
        }
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i("LocalService", "Received start id " + startId + ": " + intent);
            // We want this service to continue running until it is explicitly
            // stopped, so return sticky.
            return START_STICKY;
        }

    }

Why isn't the receiver get triggered when i get a message?

EDIT: I also get this in my log:

12-09 08:16:05.708: W/GAV3(1183): Thread[GAThread,5,main]: Service unavailable (code=1), will retry.
12-09 08:16:05.718: I/GAV3(1183): Thread[GAThread,5,main]: No campaign data found.
12-09 08:16:10.779: W/GAV3(1183): Thread[Service Reconnect,5,main]: Service unavailable (code=1), using local store.

解决方案

Why isn't the receiver get triggered when i get a message?

Because you didn't initialized the Receiver. Init it in onCreate() before registration.

@Override
public void onCreate() {
    super.onCreate();
    Log.w("A intrat in service"," ");
    Toast.makeText(getBaseContext(), 
            "A intrat in service", 
            Toast.LENGTH_SHORT).show();
     //daca primesc un mesaj se intra in functia asta
    receiver = new BroadcastReceiver(); // init the Receiver
    registerReceiver(receiver, intentFilter);
}

Edit:

Be sure you have the right permission in your manifest.

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

这篇关于广播接收器从犯规开始服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆