2013-12-12 33 views
1

收到短信時我無法捕捉到意圖。以下是我的服務代碼。我能夠抓住「Intent.ACTION_SCREEN_ON」和「Intent.ACTION_SCREEN_OFF」,但我無法抓住SMS_RECEIVED意圖「android.provider.Telephony.SMS_RECEIVED」。無法捕獲通過android.provider.Telephony.SMS_RECEIVED收到的短信

真誠感謝我在這裏做錯了什麼提示?

public class SmsCatcher extends Service{ 

BroadcastReceiver myBroadcast = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.i("myBroadcast SmsCatcher", "Entered onReceive method"); 
     if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      Log.i("myBroadcast SmsCatcher", "Caught SCREEN_OFF"); 
     } 
     if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      Log.i("myBroadcast SmsCatcher", "Caught SCREEN_ON"); 
     } 

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 
      Log.i("myBroadcast SmsCatcher", "SMS_RECEIVED"); 
     } 
    } 
}; 

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

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.i("neil SmsCatcher", "Entered onCreate() in 'SmsCatcher extends Service'"); 
    Toast.makeText(this, "Entered onCreate() in 'SmsCatcher extends Service'", Toast.LENGTH_LONG).show(); 

    registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_SCREEN_ON)); 
    registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_SCREEN_OFF)); 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    Log.i("neil SmsCatcher", "Entered onDestroy() in 'SmsCatcher extends Service'"); 
    Toast.makeText(this, "Entered onDestroy() in 'SmsCatcher extends Service'", Toast.LENGTH_LONG).show(); 
} 


} 

更新1:添加從我正在進行調試一些更多的信息: 我使用的應用程序Internal Broadcasts Monitor看到有一個廣播時,有收到一條短信,我沒有看到任何東西,很奇怪。可能是什麼原因? 我安裝了其他短信應用程序(環聊,AT & T消息) - 這些不能抑制廣播可以嗎?

更新2:發現問題,但不知道如何解決 我卸載了Google Hangouts (replaces Talk)應用程序和它的作品! 任何解決方案? (我應該可以打開一個單獨的線程按計算器規則?)

更新3:找到根本原因(下面當然了,謝謝) 事實證明,因爲新的谷歌Hangouts應用程式,我需要到setPriority(int)。我發現在Enabling SMS support in Hangouts 2.0 breaks the BroadcastReceiver of SMS_RECEIVED in my app

回答

3

您需要註冊android.provider.Telephony.SMS_RECEIVED意圖過濾器,只有當你已經註冊它,你可以能夠檢查意圖在onRecive

IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED); 
this.registerReceiver(myBroadcastReceiver, filter); 

更新從問題: 原來谷歌的Hangouts應用程序在收到短信後馬上中止廣播,因此在環聊2.0中禁用短信支持可能會解決此問題。

+0

謝謝,我添加了registerReceiver(...),但我仍然沒有抓住意圖。我更新了一些更多的調試問題,我不認爲正在生成廣播,很奇怪:S – user1406716

+0

我正在將你的標記作爲答案,因爲你設置IntentFilter的方式最容易setPriority(int)[按照我的更新3以上]。謝謝。 – user1406716

+0

我會將其添加到答案中以供將來幫助 – insomniac

2

解決您沒有註冊的意圖過濾器:

@Override 
public void onCreate() { 
    // .. 
    registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_SCREEN_ON)); 
    registerReceiver(myBroadcast, new IntentFilter(Intent.ACTION_SCREEN_OFF)); 
    registerReceiver(myBroadcast, new IntentFilter("android.provider.Telephony.SMS_RECEIVED")); // missing in your code 
} 

並請AndroidManifest.xml檢查您的權限android.permission.RECEIVE_SMS

+0

不錯,趕上@insomniac也下面,但我添加了registerReceiver(...),但我仍然不會觸發該意圖過濾器。使用「android.provider.Telephony.SMS_RECEIVED」是正確的還是應該是別的? 我已經在我的清單文件中有權限: user1406716

+0

'android.permission.RECEIVE_SMS'應該是正確的。 – flx

+0

我有領先,請參閱上面的更新2。有任何想法嗎? – user1406716