2012-08-01 68 views
1
 Uri uriSMSURI = Uri.parse("content://sms/inbox"); 
     Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null); 
     int i=0; 
     while (cur.moveToNext()) { 
      Phone_no=cur.getString(2); 
      Time=cur.getLong(4); 
      Message_body=cur.getString(11); 
      Date dateObj = new Date(Time); 
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss"); 
      String Timenew = df.format(dateObj); 
      Log.d(Tag,"INSIDE OF READ SMS INBOX"); 


      service.setClass(getBaseContext(), Background_Service.class); 
      service.putExtra("Phone_no", Phone_no); 
      service.putExtra("Message_body", Message_body); 
      service.putExtra("Timenew", Timenew); 
      getBaseContext().startService(service); 
      } 

上述代码从收件箱中读取消息。我将这些消息发送给服务以进行进一步处理。这是正确的做法。我应该为服务执行创建一个队列,如果有的话,如何创建,实现上述代码的队列。如何在android中创建队列?

回答

4

是的,它是适用的方式。 但是,我更喜欢另一个。

您可以创建一次服务并绑定到该服务,然后将Message发送给它,而不是开始一个新服务并将新服务路由到该服务。

首先你需要一个消息协议。最简单的方法是创建具有类似内容的AIDL文件。

package org.your.pkg; 

interface IBackgroundService { 
    void queueMsg(String phoneNo, String msgBody, String timeNew); 
} 

然后,您必须在您的服务中实现它。

class BackgroundService extends Service { 

    IBackgroundService.Stub binder = new IBackgroundService.Stub() { 
    public void queueMsg(String phoneNo, String msgBody, String timeNew) { 
     // enqueue message to service thread. Do not process msg in this method. 
    } 
    }; 

    public IBinder getBinder() { 
    return binder; 
    } 
} 

然后,您必须连接到您的服务。

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     IBackgroundService yourService = IBackgroundService.Stub.asInterface(service); 

     // calls to yourService.queueMsg(...) 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     Log.e(TAG, "Service has unexpectedly disconnected"); 
    } 
}; 

还有更多关于this的话题。

+0

它有帮助,我非常感谢 – 2012-08-01 14:37:50

+0

可以帮助创建线程队列。 – 2012-08-02 08:00:54