2012-01-16 22 views
1

これに関連して、ここにいくつかの質問があることは知っていますが、誰も私がこの作業を取得するのを手伝ってくれませんでした。 Samsungの携帯電話でAndroid 2.2(FROYO)を使用しています(何となく問題がある場合)。キャッチ送信SMS(Android 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と」パフォーマンス豚を待って忙しい? –