0

私は電話状態リスナーで構成されたサービスを持っており、バージョン2.3.3のアプリケーションによって開始されました

アプリケーション Telephone Manager を終了すると、null が取得されるため、電話状態リスナーはサービス コードを動作させません。私はどこで間違っていますか?

アプリケーションを終了してもサービスは破棄されませんが、リスナーは NULL になります。setCallListener() メソッドの電話管理者設定。

phonestatelistener の初期化に使用するサービスがあります。サービスは次の 2 つの方法で開始されます。

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);
    }

}
4

1 に答える 1

0

AndroidManifest.xml ファイルで次の許可を与えるのを忘れたと思います。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
于 2013-05-16T08:15:23.367 に答える