2012-07-12 30 views
1

如果用戶安裝了替代撥號程序(即在其電話上安裝了多個撥號程序),隱式意圖會要求在它們之間做出選擇。安卓顯式意圖代碼

我的問題是,我希望爲代碼中的默認撥號程序設置一個明確的意圖,因爲我不希望顯示此選擇,而是將所有操作都轉發給內置/默認撥號程序,無論這些選項可能如何。

這是我目前(隱含的)意圖代碼:

Log.i(TAG, "Sending: "+Number); 
Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ Number)); 

//called from outside of an android.app.Activity Context 
dialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(dialIntent); 

我怎麼能強迫一個明確的意圖是什麼?

我想這一點 - 但我認爲我是在錯誤的軌道這裏...

dialIntent.setComponent((new ComponentName("com.android.internal.telephony","com.android.internal.telephony.ITelephony.class"))); 

非常感謝。

回答

1

我認爲你在硬編碼的URI(或者他們稱之爲的任何東西)方面走在了正確的軌道上,但至少可以說這是一種脆弱的方法。

你試圖去做的事違背了Android的開放,靈活的設計,打敗了Intent系統的目的,並且會對用戶產生嚴重的敵意。我知道如果一個應用程序強迫我使用這個蹩腳的默認撥號器,我會更有點惱怒;)

爲什麼你需要使用內置撥號器?

我的建議:使用默認的意圖。建議您的用戶選擇內置撥號器,但嘗試支持那些選擇使用其他撥號器的用戶。

+0

我的應用程序發送USSD代碼,而不是需要用戶參與的語音產品,因爲這樣的透明背景USSD實施是必須的。發現它很難解決我認爲會是一個微不足道的問題)) – 2012-07-12 08:16:32

+1

這是我認爲可以接受的一種情況作爲例外情況:) 然後,您的擔心不是使用哪個撥號程序,而是*它被無聲地使用*。 (實際上我不確定是否所有的替代撥號器都支持USSD,但如果他們認爲能夠達到目的,我就會這麼做)。所以我的答案仍然存在:建議您的用戶設置一些默認撥號程序(以避免惱人的選擇器),並確保使用其他撥號程序進行測試。如果將來的Android版本可以讓您根據每個應用設置默認處理程序,我不會感到驚訝。 – Cheezmeister 2012-08-01 01:08:27

0

好的,而不是調用默認撥號程序,您應該調用處理調用的自定義電話撥號程序中的組件。 Becoz無法以編程方式爲動作設置默認活動