2013-04-26 10 views
9

Es scheint mir zu fehlen, Wissen über die Behandlung solcher Absichten, konnte jedoch keine Antwort für eine Weile finden.Keine Aktivität gefunden, um Absicht mit action.DIAL zu behandeln.

Ich habe eine Aktivität mit einem Fragment. Das Fragment führt diesen Code in Zweck einen Kontakt anrufen:

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

auch die Erlaubnis enthalten

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

Der Ausgang ist No Activity found to handle Intent und die App stürzt ab.

Hier manifestieren Umsetzung der Aktivität, die Fragment enthält:

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

Was mache ich falsch? Benötige ich eine spezielle Aktivität, die im Manifest dafür deklariert ist?

+0

Ist Ihr contact.getBusinessPhone() zurückgegeben Wert starten von Tel:? –

+0

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

+0

überprüfen Sie

Antwort

54

Sie müssen Dial-Intent-Filter nicht im Manifest deklarieren und benötigen keine Berechtigungen für ACTION_DIAL. Geben Sie für meine Implementierung

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

ist auch gut, um zu prüfen Telefonie auf dem Gerät unterstützt

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

Würde geben +2, wenn ich könnte. 1 für eine Antwort und 1 für das isTelefonyEnabled-Problem, was wichtig ist, wenn die App auch tablet targeted ist. Vielen Dank! –

+7

Beachten Sie, dass TelephonyManager.SIM_STATE_READY für CDMA-Telefone fehlschlägt, die Telefonie unterstützen (z. B. einige Verizon-Telefone). Also, wenn die 'tm.getPhoneType()! = TelephonyManager.PHONE_TYPE_GSM' Sie überprüfen möchten, context.getPackageManager(). HasSystemFeature (PackageManager.FEATURE_TELEPHONY) 'um sicherzustellen, ob es wirklich ein Tablet ohne Telefonie oder einfach ist ein Telefon ohne SIM-Karten aber mit Telefonie. –

+1

@ iCode4Food Wird der PackageManager.FEATURE_TELEPHONY prüfen, ob das Gerät über einen VoIP-Dialer wie Hangouts Dialer verfügt? – miguel

5

Intent.ACTION_VIEW gearbeitet besser für mich, weil auf Tabletten ohne Dialer automatisch umgeschaltet „In Kontakt“.

Verwandte Themen