2016-02-28 60 views
0

我想通過應用程序撥打電話。
是否可以限制選項只能從內置的電話應用程序調用,而不是顯示Viber,Skype或WhatsApp作爲選項?使用內置的電話撥號器啓動電話

這裏是我的代碼:

 Intent i = new Intent(Intent.ACTION_DIAL); 
     i.setData(Uri.parse("tel:"+ adapter.getItem(position).getContent())); 
     startActivity(Intent.createChooser(i, getString(R.string.call_number))); 

我想是這樣的:

enter image description here

,而不是像這樣(如果我已經安裝了Viber的和Skype):

enter image description here

我試機智h此代碼:

public static Intent callfromDefaultDialer(Context ctxt, String no) { 

    Intent i = new Intent(); 
    i.setAction(Intent.ACTION_CALL); 
    i.setData(Uri.parse("tel:" + no)); 
    PackageManager pm = ctxt.getPackageManager(); 
    List<ResolveInfo> list = pm.queryIntentActivities(i, 0); 
    for (ResolveInfo info : list) { 
     String pkgnam = info.activityInfo.packageName; 
     if (pkgnam.toLowerCase().equals("com.android.phone")) { 
      i.setClassName(pkgnam, info.activityInfo.name); 
      return i; 
     } 
    } 

    return i; 
} 

並且這會打開Skype作爲選擇我也不知道爲什麼?

+4

請允許*用戶*選擇*用戶*希望如何撥打電話。它是*用戶的*設備,不是你的。 – CommonsWare

+0

我認爲您必須手動指定手機應用程序的包名稱意圖 –

+0

請查看我的問題編輯 – vikifor

回答

0

可以使用ACTION_CALL意向標誌

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

但是,這是沒有更多的正確的選擇。

您需要在清單中詢問直接電話訪問權限。

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

如果僅使用這兩行代碼,你將有撥號器和Skype的不是。

不要創建一個選擇器,只是直接使用默認的撥號器意圖。

還可以在手機的默認電話撥號器應用程序中查看,這是Skype嗎?

此外,你還要檢查GSM網絡是否可用。