打个电话点击按钮

时间:2011-03-23 09:46:18

标签: android button phone-call

当我按下android中的按钮时,我正在尝试拨打电话

((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);
  }
});

但是当我跑步并点击按钮时,它会给我错误

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

如何解决此问题?

13 个答案:

答案 0 :(得分:128)

您是否已在清单文件中获得了许可

 <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);

如果您发现任何问题,请告诉我。

答案 1 :(得分:13)

  

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

ACTION_DIAL只会打开填写的dialer with the number,但允许用户实际使用c 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> 

答案 2 :(得分:12)

将您的字符串更改为String phno="tel:10digits";,然后重试。

答案 3 :(得分:10)

以上所有内容都没有修改过这里为我做的代码

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

答案 4 :(得分:5)

我也有这段时间。我没有意识到,除了额外的许可,你需要将“tel:”附加到包含数字的字符串中。这是我的功能之后的样子。希望这可以帮助。

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

  startActivity(intent);
}

答案 5 :(得分:4)

在您的意图中添加“tel:”以及您要拨打的号码,然后开始您的活动。

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

答案 6 :(得分:4)

要将代码放在一行中,请尝试以下方法:

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

以及适当的舱单许可:

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

希望这有帮助!

答案 7 :(得分:2)

检查权限之前(对于android 6及以上版本):

if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) ==
                            PackageManager.PERMISSION_GRANTED) 
   {

     context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:09130000000")));
   }

答案 8 :(得分:2)

对于那些使用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" />

答案 9 :(得分:1)

还可以检查设备上支持的电话

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

答案 10 :(得分:1)

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> 

答案 11 :(得分:0)

我刚刚在Android 4.0.2设备(GN)上解决了这个问题,唯一适用于此设备/版本的版本类似于第一个使用CALL_PHONE权限的5星级版本和答案:

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

使用任何其他解决方案,我在此设备/版本上获得了ActivityNotFoundException。 旧版本怎么样?有人会给出反馈吗?

答案 12 :(得分:0)

获得许可:

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);