2012-10-04 104 views
0

我用BroadcastReceiver正在收聽撥出的電話。從BroadcastReceiver發起新的電話呼叫

當某些呼叫被放置時,具體的號碼和/或條件得到滿足 - 這並不重要,我攔截了呼叫。

之後,我想要將一個新的電話,以另一個號碼。在這裏我遇到了麻煩。呼叫未被放置 - 沒有任何反應 - 新的活動已啓動,但未啓動呼叫。空視圖,就是這樣。

順便BroadcastReceiver收到意圖,然後CallInitiatingActivity.onCreate()被調用並執行。

廣播聽衆

public class OutgoingCallListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (conditionsAreMet()) { 
      setResultData(null); //terminate current call 
      Inetent intent = new Intent(context, CallInitiatingActivity.class) 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
      startActivity(intent); 
     } 
    } 
} 

呼叫發起活動

public class CallInitiatingActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number)); 
     startActivity(intent); 
    } 
} 

許可使用:

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

可疑日誌調試級別:

checkAndCopyPhoneProviderExtras: some or all extras are missing. 

我將它追溯到this class中#2074行的方法。

+0

任何日誌? – njzk2

+0

更新的問題與「可疑日誌」 –

+0

日誌中的任何錯誤? – njzk2

回答

0

在問題中的代碼正常發起新的呼叫。 但我看不到這個,因爲BroadcastReceiver通過NEW_OUTGOING_CALL行動收到意圖。

當我創建ACTION_CALL,把演員,以確定我手動創建一個呼叫意圖「轉化」到另一個意圖與NEW_OUTGOING_CALL採取的措施。這種方式有效地減少了所有額外的額外費用。

0

你可能需要確保您有正確的權限:

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

,並可能有助於

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

添加到意圖。

+0

對不起,我忘了提及,我已經在代碼中添加了必需的權限和標誌。我會用正確的信息更新問題。 –

0

您定義的動作在你的Manifest.xml類廣播接收器這樣

<receiver android:name="yourBroadcastReceiverpackagename.BroadcastReceiverclassname" 
     android:exported="false"> 
<intent-filter> 
<action 
     android:name="Declare your Action name here"/> 
</intent-filter> 

+0

你是什麼意思定義行動?我必須製作另一臺BroadcastReceiver嗎? –

+0

不,您必須將您的BroadcastReceiver類添加到Manifest.xml文件 – Rajendra

+0

中。也許我不清楚在我的問題 - 我打斷了我原來的電話,但另一個電話沒有放置。 我的BroadcastReceiver(OutgoingCallListener)在Manifest.xml中聲明 –