2013-03-06 47 views
2

我試圖通過廣播接收器識別來電。我無法這樣做!事實上,我無法'觸發'廣播!如何在廣播接收器的幫助下檢測來電?

這裏是我的代碼:

activate.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       Toast.makeText(getApplicationContext(),"Clicked",1).show(); 
       final String BROADCAST_ACTION_NAME = ".BroadcastMM"; 
       Intent intent = new Intent(); 
       intent.setAction(BROADCAST_ACTION_NAME);   
       sendBroadcast(intent); 


      }           
      } 

我不知道,如果這個 'sendBroadcast' 是不斷觸發!在我的廣播接收機文件:

public void onReceive(Context context, Intent intent) 
    { 
     if(intent.getAction()=="android.intent.action.PHONE_STATE"){ 
     Toast.makeText(c,"BroadCast fired!",1).show();} 
     Bundle extras = intent.getExtras(); 
     String state = extras.getString(TelephonyManager.EXTRA_STATE); 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      Toast.makeText(context, "Ringing", 1).show(); 
     } 
}  

我的清單文件:

<receiver android:name=".BroadcastMM" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" > 
       </action> 
      </intent-filter> 
     </receiver> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

有一些邏輯,我失蹤?我對Android非常陌生,所以請幫助我。

回答

3
intent.getAction()=="android.intent.action.PHONE_STATE" 

應該

TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction()); 

因爲這是你如何比較字符串(與equals())。

此外,您用於廣播的代碼不應該廣播 - 沒有".BroadcastMM"操作。試着做一個明確的一個,而不是:

Intent intent = new Intent(v.getContext(),BroadcastMM.class); 
sendBroadcast(intent); 

這也可能是你無法播放android.intent.action.PHONE_STATE,所以你if如果你讓一個明確的意圖不會被執行。

如果您確實想檢查您的BroadcastReceiver是否正常工作,請將打印輸出/ Toasts放在所有ifs之外。然後一旦確定BroadcastReceiver響應,請檢查。請記住,因爲你只聽一個意圖過濾器,如果檢查意圖是否是PHONE_STATE意圖有點多餘。