2012-09-11 23 views
0

我的應用需求Android的活動,並與短信contentobserver

  • 服務的應用程序將有一個活動和服務。

  • 該服務有一個短信內容觀看者。

  • 應用程序安裝後,服務應該運行

  • 註冊和服務內contentobserver的註銷應 從活動控制的所有不論 應用的活性或沒有時間。

  • 在卸載應用程序時應該銷燬服務。

我試了一些代碼。在服務的創建上,我完成了內容觀察員 的resgitartion和ondestroy我未註冊它。我使用了該活動的啓動和停止服務。 但即使在停止服務後,內容觀察者的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 
+0

顯示您在活動中停止服務的郵編。 –

+0

gtw什麼是短信內容觀看者是一個實際的類型?我認爲你聽聽意圖接收者的意圖。 –

+0

意圖發送短信不會'工作。所以我使用的是Contentobserver。我粘貼了我的代碼。 – user1123931

回答

2

我可以解決這個問題。這是一個計時問題。停止服務需要一段時間。