android Activity и сервис с sms contentobserver

Мои требования к приложению

  • Приложение будет иметь активность и сервис.

  • В сервисе есть sms contentobserver.

  • После установки приложения Служба должна работать все время, независимо от того, активно приложение или нет.

  • Регистрация и отмена регистрации contentobserver внутри сервиса должны контролироваться из активности.

  • При удалении приложения служба должна быть уничтожена.

Я попробовал код. При создании службы я сделал resgitartion наблюдателя контента, а при уничтожении я отменил его регистрацию. Я использовал службу запуска и остановки из действия. Но даже после остановки службы метод onchange наблюдателя содержимого все еще вызывается.

пожалуйста, дайте мне знать пример кода и определение манифеста этой службы.

public class MyActivity extends ListActivity implements OnInitListener {


@Override
protected void onDestroy() {

    super.onDestroy(); // let it be here as per the android TTS samples

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Intent sintent = new Intent(MyActivity.this,MyService.class);
    MyActivity.this.startService(sintent);

}



private boolean SSMyservice() {
    // TODO Auto-generated method stub


    //stop service      
    Intent sintent = new Intent(MyActivity.this,MyService.class);
    MyActivity.this.stopService(sintent);

    //do some work

    //start service again
    MyActivity.this.startService(sintent); //start service again


    return true;
} //importdata





@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.TTSread:
        return true;    
    case R.id.SSS:
        SSMyservice();
        return true;                        
    }

    return super.onOptionsItemSelected(item);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {




//   Log.v(TAG,"option menu created");

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.layout.omenu, menu);
    return true;
}


}

------------end MyActivity---------------------
----------------------------------

public class MyService extends Service {  

protected SmsObserver smsSentObserver=null;


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

    @Override          
    public void onCreate() 
    {

        registersmsevent();

    }   


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        super.onStartCommand(intent, flags, startId);

         return Service.START_STICKY;  

    }



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



    public void registersmsevent() {
        // TODO Auto-generated method stub
        if(smsSentObserver == null)
        {
        final Uri SMS_STATUS_URI = Uri.parse("content://sms");  
        smsSentObserver = new SmsObserver(new Handler());
        MyService.this.getContentResolver().registerContentObserver(SMS_STATUS_URI, true, smsSentObserver); 
        }

    }

    public void unregistersmsevent() {
        if(smsSentObserver != null)
        {
            MyService.this.getContentResolver().unregisterContentObserver(smsSentObserver); 
            smsSentObserver = null;
        }
    }



    public class SmsObserver extends ContentObserver {



        Handler handler; 

          public SmsObserver(Handler handler) {        
              super(handler);
              // TODO Auto-generated constructor stub                
              this.handler = handler; 
          }



          @Override 
        public boolean deliverSelfNotifications() {
            return true;
        }

          @Override 
        public void onChange(boolean selfChange) {

              //my code........

            super.onChange(selfChange);
        }



    }//End of class SmsObserver


}//end of service

person user1123931    schedule 11.09.2012    source источник
comment
почтовый индекс, показывающий остановку службы в действии.   -  person Code Droid    schedule 11.09.2012
comment
gtw что такое sms contentobserver это фактический тип? Я думал, что смс вы слушаете намерения в приемнике намерений.   -  person Code Droid    schedule 11.09.2012
comment
намерение для отправленных смс-сообщений не будет работать. Поэтому я использую contentobserver. Я вставил свой код.   -  person user1123931    schedule 11.09.2012


Ответы (1)


Я мог бы решить проблему. Это был вопрос времени. Остановка службы занимает некоторое время.

person user1123931    schedule 11.09.2012