2012-01-16 2 views
1

나는 이것에 관한 약간의 질문이 여기에 있다는 것을 알고있다. 그러나 그들 중 아무도 내가 보낸이 작업 - 캡처 SMS를 얻는 것을 도왔다. 삼성 휴대 전화에서 Android 2.2 (FROYO)를 사용하고 있습니다 (문제가있는 경우).잡아 먹힌 SMS (안드로이드 2.2)

나는 이것을 Stackoverflow에서 많이 찾았으며 나의 요청에 ContentObserver이 필요하다는 것을 깨달았다. 내가 대신 활동의 서비스를 사용하고, 그래서 난 내 Service 클래스에서 그 ContentObserver 등록했습니다, 그것은 다음과 같습니다 : 당신은 내가 몇 년 Toast을 넣었습니다 볼 수 있듯이

public class SMSSending extends Service { 

private class MyContentObserver extends ContentObserver { 

    public MyContentObserver() { 
     super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange) { 
     super.onChange(selfChange);  

     Uri uriSMSURI = Uri.parse("content://sms/sent"); 
     Cursor cur = getBaseContext().getContentResolver().query(uriSMSURI, null, null, null, null);   
     cur.moveToNext(); 
     String content = cur.getString(cur.getColumnIndex("body")); 

     Toast.makeText(getApplicationContext(), "SOME TEXT", Toast.LENGTH_LONG).show(); 

    } 

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

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

@Override 
public void onCreate() { 

    MyContentObserver contentObserver = new MyContentObserver(); 
    ContentResolver contentResolver = getBaseContext().getContentResolver(); 
    contentResolver.registerContentObserver(Uri.parse("content://sms/sent"),true, contentObserver); 
    Toast.makeText(getApplicationContext(), "SERVICE CREATED", Toast.LENGTH_LONG).show(); 
} 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY; 
} 

@Override 
public void onStart(Intent intent, int startid) { 
    Toast.makeText(getApplicationContext(), "SERVICE STARTED", Toast.LENGTH_LONG).show(); 
} 

}

이 작업이 전혀 작동하는지 알 수 있도록 장소가 표시됩니다. 불행히도이 알림 중 아무 것도 표시되지 않습니다. 또한, LogCat에 대한 코드를 넣으려고했지만 아무 일도 일어나지 않습니다. content://sms/sent 대신 Uri uriSMSURI = Uri.parse("content://sms");을 넣으려고했지만 응용 프로그램이 아무 것도하지 않습니다. 물론 , 나는 매니페스트에 권한이 : 나는 무엇을

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 

를 놓친 거지?

답변

2

다행히도, 나는 그것을 다룰 수 있었지만 완전히 다른 접근법을 사용했습니다. 어쩌면 이것은 미래에 누군가를 도울 것입니다.

ContentObserver를 사용하는 대신에 (왜 아직도 작동하지 않는지 모르겠습니다) 새로운 스레드를 생성하고 서비스가 생성되고 시작된 후에 시작했습니다 . 그래서 다음과 같습니다 : 그것은 마음에 가지고, ContentObserver를 사용하여보다 더 나은, 절대적으로 안정적으로 작동하고

... 

final Uri CONTENT_URI = Uri.parse("content://sms/sent"); 

... 

public void onStart(Intent intent, int startid) { 
     Go(); 
    } 
    private void Go(){ 

     new Thread(new Runnable() { 
      public void run() { 

       try {  

       while(true){ 

       Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null, null); 

       if(cursor.moveToFirst()){ 

        text = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString(); 


        if(!text.equalsIgnoreCase(actual)){ 
         previous = text; 
            //do what you need.. 


        } 

       } 

       Thread.sleep(60000); 
      } 

      } catch (InterruptedException e) { 

       e.printStackTrace(); 
      } 
      } 
    }).start(); 

명의 많은, 그것으로 문제가 있었다 this 및 다른 같은 ..

+1

ISN ' 성능 호그 기다리고 바쁜가? –