2013-04-26 10 views
9

私はそのような意図を処理する知識が不足しているようですが、しばらく回答を見つけることができませんでした。アクションとのインテントを処理するアクティビティが見つかりません。DIAL

私は1つの断片で活性を持っています。フラグメントは、連絡先を呼び出すことを目的に、このコードを実行:

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

はまた許可

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

出力はNo Activity found to handle Intentとアプリがクラッシュですが含まれています。ここで

は、フラグメントを保持している活動のマニフェスト実装です:私は間違っ

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

何をしているのですか?マニフェストで宣言された特別な活動が必要ですか?

+0

あなたのcontact.getBusinessPhone()戻り値は、tel:で始まっていますか? –

+0

を参照してください:http://stackoverflow.com/questions/5403308/make-a-phone-call-click-on-a-button – etienne

+0

答えて

54

マニフェストにダイヤルインテントフィルタを宣言する必要はなく、ACTION_DIALへのアクセス権は必要ありません。私の実装

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

もチェックして良いです探しは、電話は、それが自動的に「の連絡先に追加」に切り替えダイヤラなしのため、タブレット上の私のためのより良い働いデバイス

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

できるなら+2を与えるだろう。回答が1、isTelephonyEnabledの問題が1と表示されています。これは、アプリもタブレットをターゲットにしている場合に重要です。ありがとう! –

+7

TelephonyManager.SIM_STATE_READYは、テレフォニーをサポートするCDMA電話(一部のVerizon電話など)では失敗します。 'tm.getPhoneType()!= TelephonyManager.PHONE_TYPE_GSM'の場合、' context.getPackageManager()。hasSystemFeature(PackageManager.FEATURE_TELEPHONY) 'をチェックして、本当に電話がないタブレットか、 SIMカードがなくても電話が付いた電話。 –

+1

@ iCode4FoodデバイスにハングアウトダイヤラのようなVoIPダイヤラがあるかどうかをPackageManager.FEATURE_TELEPHONYで確認しますか? – miguel

5

Intent.ACTION_VIEWでサポートされています。

関連する問題