2013-04-06 3 views
-4

Я получаю sms с помощью широковещательного приемника. Он отлично работает. Теперь я хочу читать sms из Inbox с помощью сервиса (который принимается широковещательным приемником).Как читать смс с помощью службы

Я хочу, чтобы получить смс из папки «Входящие», используя SERVICE. Сброс SMS должен происходить в фоновом режиме не в основном потоке. Никакая деятельность не должна использоваться. // Broadcast приемник для приема смс и запуска службы с помощью намерения общественного класса SMSReceiver расширяет BroadcastReceiver {

@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] message = null; 
    String str = ""; 
    if(bundle != null){ 
     Object[] pdus = (Object[])bundle.get("pdus"); 
     message = new SmsMessage[pdus.length]; 
     for(int i = 0; i<message.length; i++){ 
      message[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
      str += "New SMS from cloudy contacts " + message[i].getOriginatingAddress(); 
     } 

     Toast.makeText(context, str, Toast.LENGTH_LONG).show(); 

     Intent intent1 = new Intent(context,MyService.class); 
     context.startService(intent1); 
    } 

} 

}

Сервье общественного класса MyService расширяет службы { ReadSMS readSMS;

@Override 
public IBinder onBind(Intent arg0) { 



    return null; 
} 

public void onCreate(Bundle savedInstanceState){ 
    Log.d("Service","inside onCreate of service"); 


} 

public void onDestroy(){ 
    Log.d("Service", "destroyed"); 

} 

public void onStart(){ 
    Log.d("Service","starting service to read sms from inbox"); 
    Toast.makeText(this,"Reading sms from inbox",Toast.LENGTH_LONG).show(); 
    readSMS = new ReadSMS(); 
    ArrayList list = readSMS.readSms("inbox"); 

} 

public class ReadSMS{ 



    public ArrayList readSms(String inbox){ 
     ArrayList sms = new ArrayList(); 
     Uri uri = Uri.parse("content://sms/inbox"); 
     Cursor cursor = getContentResolver().query(uri, new String[]{"_id","address","date","body"},null,null,null); 
     cursor.moveToLast(); 
     String address = cursor.getString(1); 
     String body = cursor.getString(3); 
     sms.add(address+" "+body); 
     return sms; 


    } 
} 

}

+0

, пожалуйста, введите код –

ответ

0

сообщения в почтовом ящике не будет получено вещательного приемника, так как это не транслируется. Вам нужно будет прочитать собственную базу данных на устройстве.

гляньте here

EDIT: Прежде всего, делать что-то из службы автоматически не породит фоновый поток. Служба будет работать в основном потоке.

Осторожно: служба работает в основном потоке своего процесса хостинга - служба не создает свой собственный поток и не запускается в отдельном процессе (если не указано иное). Это означает, что если ваша служба будет выполнять любую интенсивную работу или блокировку процессора (например, воспроизведение MP3 или сетевое взаимодействие), вы должны создать новый поток в службе для выполнения этой работы. Используя отдельный поток, вы уменьшите риск ошибок приложения, не отвечающих (ANR), и основной поток приложения может оставаться посвященным взаимодействию пользователя с вашими действиями.

Тогда вы можете, конечно же, создать нить самостоятельно или использовать IntentService. Но начните с чтения here.

+0

Посмотрите на ссылку. – jelgh

+0

Да, вы правильно выполняете прогоны в основном потоке, и мне нужно создать новый поток внутри службы, чтобы выполнить любую работу. Но, пожалуйста, вы можете сказать мне, как реализовать поток в службе для чтения/извлечения смс из папки «Входящие» –