2013-04-26 8 views
9

Tôi dường như thiếu kiến ​​thức về cách xử lý các ý định như vậy, tuy nhiên không thể tìm thấy câu trả lời trong một thời gian.Không tìm thấy hoạt động nào để xử lý Intent with action.DIAL

Tôi có hoạt động với một đoạn. Đoạn thực thi mã này trong mục đích kêu gọi một số liên lạc:

private void onCall() { 
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(contact.getBusinessPhone())); 
    startActivity(intent); 
} 

Cũng bao gồm cho phép

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

Đầu ra là No Activity found to handle Intent và treo ứng dụng.

Đây là triển khai manifest của hoạt động chứa đoạn:

<activity android:name="activities.ContactActivity">    
    <intent-filter> 
     <action android:name="android.intent.action.DIAL" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

Tôi đang làm gì sai? Tôi có cần một số hoạt động đặc biệt được khai báo trong biểu hiện cho điều đó không?

+0

Contact.getBusinessPhone() của bạn có trả về giá trị bắt đầu bằng tel:? –

+0

xem: http://stackoverflow.com/questions/5403308/make-a-phone-call-click-on-a-button – etienne

+0

kiểm tra

Trả lời

54

Bạn không cần khai báo bộ lọc mục đích quay số trong tệp kê khai và không cần bất kỳ quyền nào đối với ACTION_DIAL. Tìm kiếm thực hiện của tôi

private void startDialActivity(String phone){ 
    Intent intent = new Intent(Intent.ACTION_DIAL); 
    intent.setData(Uri.parse("tel:"+phone)); 
    startActivity(intent); 
} 

cũng là tốt để kiểm tra được điện thoại hỗ trợ trên thiết bị

private boolean isTelephonyEnabled(){ 
    TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
    return telephonyManager != null && telephonyManager.getSimState()==TelephonyManager.SIM_STATE_READY; 
} 
+0

Sẽ cung cấp cho +2 nếu tôi có thể. 1 cho một câu trả lời và 1 cho chỉ vấn đề isTelephonyEnabled, đó là quan trọng nếu ứng dụng cũng là máy tính bảng nhắm mục tiêu. cảm ơn! –

+7

lưu ý rằng TelephonyManager.SIM_STATE_READY sẽ không hoạt động đối với điện thoại CDMA hỗ trợ điện thoại (ví dụ: một số điện thoại Verizon). Vì vậy, nếu 'tm.getPhoneType()! = TelephonyManager.PHONE_TYPE_GSM' bạn sẽ muốn kiểm tra' context.getPackageManager(). HasSystemFeature (PackageManager.FEATURE_TELEPHONY) 'để đảm bảo cho dù đó thực sự là một máy tính bảng không có điện thoại hay chỉ điện thoại không có thẻ SIM nhưng có điện thoại. –

+1

@ iCode4Food Liệu PackageManager.FEATURE_TELEPHONY có kiểm tra xem thiết bị có trình quay số VoIP như Hangouts Dialer không? – miguel

5

Intent.ACTION_VIEW làm việc ra tốt hơn cho tôi vì trên máy tính bảng mà không có một dialer nó tự động chuyển sang "Add to Liên".