2013-11-21 54 views
1

Skype的運行此發送USSD代碼編程方式撥打的不是普通電話

String ussdCode = "*" + "100" + Uri.encode("#"); 
startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdCode))); 

我希望做一個正常的電話,但不是說Skype的去正面和撥打電話的* 100# USSD代碼。我從Skype註銷,它將Skype帶到了前面!
如何強制它使用正常的電話而不是Skype?

+0

嗨Saleh,我正在努力整合USSD與我的應用程序。你知道是否有可能以編程方式發送數據?例如,像用戶ID一樣。謝謝 – lisovaccaro

回答

3

那是因爲你有Skype作爲默認的通話應用程序。這是一個設備配置。你可以改變它,但是請注意,如果你這樣做,它會改變這種結果,所以Skype不會再成爲手機中的默認設置。

您可以清除默認的應用程序調用此表格活動

getPackageManager().clearPackagePreferredActivities(PACKAGENAME); 

的Skype的包名是com.skype.raider,所以你的情況,你把這個

getPackageManager().clearPackagePreferredActivities("com.skype.raider"); 
當然

你打電話給你之前打電話給startActivity

UPDATE

我記得如果你不想重置默認配置,你可以嘗試強制一個應用程序來處理你發送給startActivity的意圖。但是你有一個問題,你將不得不知道應用程序的包名稱以及應該處理它的活動。在某些情況下,很容易發現,但在其他情況下則不會。我一直在搜索這個默認的Android撥號器的信息,也看着我的設備,但我沒有找到任何東西。無論如何,如果你能找到它,你可以使用下面的代碼,它會好很多,因爲它不會改變任何設置。你也可以記住它,因爲它可以在其他情況下得心應手:

Intent intent = new Intent(); 
intent.setComponent(new ComponentName("PACKAGE_NAME","PACKAGENAME.ACTIVITY_NAME")); 
intent.setAction("android.intent.action.VIEW"); 
intent.addCategory("android.intent.category.BROWSABLE"); 
Uri uri = Uri.parse(url); 
intent.setData(uri); 
try 
{ 
    startActivity(intent); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
}