打个电话点击一个button

我试图在android中按下button时拨打电话

((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String phno="10digits"; Intent i=new Intent(Intent.ACTION_DIAL,Uri.parse(phno)); startActivity(i); } }); 

但是当我运行并点击button,它给了我错误

 ERROR/AndroidRuntime(1021): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=9392438004 } 

我该如何解决这个问题?

你有清单文件的权限吗?

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

并在你的活动中

  Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:123456789")); startActivity(callIntent); 

让我知道如果你发现任何问题。

把你的stringString phno="tel:10digits"; 然后再试一次。

有两个意图调用/开始调用:ACTION_CALL和ACTION_DIAL。

ACTION_DIAL只会打开dialer with the number ,但允许用户all or reject the callACTION_CALL会立即调用该号码并需要额外的权限

所以确保你有权限

 uses-permission android:name="android.permission.CALL_PHONE" 

在你的AndroidManifest.xml中

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dbm.pkg" android:versionCode="1" android:versionName="1.0"> <!-- NOTE! Your uses-permission must be outside the "application" tag but within the "manifest" tag. --> <uses-permission android:name="android.permission.CALL_PHONE" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- Insert your other stuff here --> </application> <uses-sdk android:minSdkVersion="9" /> </manifest> 

上面没有一个工作,有点修补这里的代码,为我做的

  Intent i = new Intent(Intent.ACTION_DIAL); String p = "tel:" + getString(R.string.phone_number); i.setData(Uri.parse(p)); startActivity(i); 

我也有这样的时间了。 我没有意识到,除了额外的权限,你需要追加“电话:”string中的数字。 这是我的function后,看起来像什么。 希望这可以帮助。

 @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_DIAL); String temp = "tel:" + phone; intent.setData(Uri.parse(temp)); startActivity(intent); } 

添加“电话:”连同你的号码拨打你的意图,然后开始你的活动。

 Intent myIntent = new Intent(Intent.ACTION_CALL); String phNum = "tel:" + "1234567890"; myIntent.setData(Uri.parse(phNum)); startActivity( myIntent ) ; 

要让代码在一行内,请试试这个:

 startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:123456789"))); 

以及适当的清单许可:

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

希望这可以帮助!

设备上支持的电话也很好检查

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

检查权限之前:

 if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:09130000000"))); } 
 I hope, this short code is useful for You, ## Java Code ## startActivity(new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+txtPhn.getText().toString()))); ---------------------------------------------------------------------- Please check Manifest File,(for Uses permission) ## Manifest.xml ## <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dbm.pkg" android:versionCode="1" android:versionName="1.0"> <!-- NOTE! Your uses-permission must be outside the "application" tag but within the "manifest" tag. --> ## uses-permission for Making Call ## <uses-permission android:name="android.permission.CALL_PHONE" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- Insert your other stuff here --> </application> <uses-sdk android:minSdkVersion="9" /> </manifest> 

对于那些使用AppCompact的…试试这个

 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.content.Intent; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import android.net.Uri; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button startBtn = (Button) findViewById(R.id.db); startBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { makeCall(); } }); } protected void makeCall() { EditText num = (EditText)findViewById(R.id.Dail); String phone = num.getText().toString(); String d = "tel:" + phone ; Log.i("Make call", ""); Intent phoneIntent = new Intent(Intent.ACTION_CALL); phoneIntent.setData(Uri.parse(d)); try { startActivity(phoneIntent); finish(); Log.i("Finished making a call", ""); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(this, "Call faild, please try again later.", Toast.LENGTH_SHORT).show(); } } } 

然后将此添加到您的清单,,,

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

我刚刚在Android 4.0.2设备(GN)上解决了这个问题,唯一一个为这个设备/版本工作的版本与第一个使用CALL_PHONE权限的5星级相似,答案如下:

 Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:123456789")); startActivity(callIntent); 

与任何其他的解决scheme,我得到了这个设备/版本的ActivityNotFoundException。 旧版本如何? 有人会提供反馈吗?

经许可:

 Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:9875432100")); if (ActivityCompat.checkSelfPermission(yourActivity.this,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(yourActivity.this, android.Manifest.permission.CALL_PHONE)) { } else { ActivityCompat.requestPermissions(yourActivity.this, new String[]{android.Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE); } } startActivity(callIntent);