2013-05-16 1 views
0

에 널 점점 나는 서비스가 전화 상태 리스너를 구성하고 내가 널 때문에 전화 상태 리스너 아래 서비스 코드를 작동하지 않습니다 점점 ​​응용 프로그램 전화 관리자를 종료 할 때 내 application.in 버전 2.3.3안드로이드 TelephoneManager 서비스

에 의해 시작이 어떤 생각? 나는 어디에서 잘못 했는가?

NULL을 가져 오는 application.but 리스너를 종료 할 때 서비스가 파괴되지 않습니다. 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); 
    } 

} 

답변

0

난 당신이 내가 그것을 가지고, 당신의 AndroidManifest.xml 파일에

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

을 다음과 같은 권한을 부여하는 것을 잊었다 생각합니다. 나는 해결책을 찾았다. 나는 System.exit (0) 명령을 사용하여 프로세스를 죽였고 2.3.3 버전 서비스가 중지되었다가 다시 생성되었지만 다시 시작되지는 않았습니다. 그래서 내 청취자는 null이었다. 이제 System.exit을 finish로 변경했습니다. 그리고 리스너를 서비스 metod 만들기에도 설정했습니다. – user2331641