android TelephonyManager在服务中获取null

时间:2013-05-16 08:11:09

标签: android telephonymanager

我有一个服务组合电话状态监听器,由我的应用程序启动。版本2.3.3

当我退出应用程序电话管理器获取null因此电话状态监听器不能在任何想法下工作服务代码?我在哪里做错了?

当我退出application.but监听器获取NULL时,服务不会破坏。电话管理器设置setCallListener()方法。

我有一个服务用于初始化phonestatelistener。服务以两种方式启动:

1-BOOT_COMPLETED接收器(工作正常的监听器不是null并且捕获调用)2 - 由我的应用程序使用startService(new Intent(getApplicationContext(),MyPhoneStateListener.class));

问题是,当我的应用程序启动服务时,我的应用程序在这种情况下完成,我的监听器不起作用。我知道TelephoneManager = null值。如何提供使应用程序完成后服务意图继续?

public class MyPhoneStateListener extends Service{

    SmsBroadcastReceiver _smsbroadcast;
    private Context context;

    MyCustomStateListener myCustomStateListener;
    TelephonyManager telephonymanager;

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) 
    {
        setCallListener();
        _smsbroadcast=new SmsBroadcastReceiver();
        GetShieldState();  


        return START_STICKY;

    }

    private void setCallListener()
    {

        try
        {
            if (telephonymanager==null)
            {               
                telephonymanager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
                myCustomStateListener = new MyCustomStateListener(context,telephonymanager);
                telephonymanager.listen(myCustomStateListener, PhoneStateListener.LISTEN_CALL_STATE);

            }
        }
        catch(Exception ex)
        { 

        }
    }




    @Override
    public void onCreate() 
    {
        //Log.e("startservis","create");
        context=MyPhoneStateListener.this;      
        super.onCreate();    
    }


    @Override
    public void onDestroy() 
    {
        Log.e("onDestroy","destroy");       
    }



    @Override
    public boolean onUnbind(Intent intent) 
    {
        //Toast.makeText(getApplicationContext(),"unbind:", Toast.LENGTH_SHORT).show();
        return super.onUnbind(intent);
    }

}

1 个答案:

答案 0 :(得分:0)

我想您忘了在AndroidManifest.xml文件中提供以下权限,

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