在android中单击按钮拨打电话

Posted

技术标签:

【中文标题】在android中单击按钮拨打电话【英文标题】:Make telephone call on a button click in android 【发布时间】:2017-08-12 16:10:00 【问题描述】:

我在我的应用程序中实现了电话服务,当我们单击该按钮时,它是一个按钮,它将拨打电话,但问题是它不支持某些设备上的所有设备,它运行良好,而在某些设备上则不支持现在工作为我提供了任何解决方案,以便它可以在所有设备上运行。 这是我的代码。

public class SOSCallHelp extends AppCompatActivity 
private Button call1;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_soscall_help);
    call1=(Button)findViewById(R.id.call1);

  call1.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:9078784565"));
            if (ActivityCompat.checkSelfPermission(SOSCallHelp.this,
                    Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED)

            
                return;
            
            startActivity(callIntent);
        
    );

【问题讨论】:

some devices it is not working 什么问题??崩溃 让我猜猜,它不适用于新的 android 版本? 您是否授予了 Android 6.0 权限 不,我没有授予 6.0 权限以及在哪里授予 @Ramesh 应用程序在某些设备上不会崩溃,它会在单击按钮时调用,而在某些设备中,单击按钮时没有任何反应。这就是问题所在。 【参考方案1】:

请确保在您的 App Manifest 中为 Pre-Lollipop 设备添加以下权限。

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

【讨论】:

【参考方案2】:

请求权限

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

打电话

        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:9078784565"));
        if (ActivityCompat.checkSelfPermission(SOSCallHelp.this,
                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED)

        
            return;
        
        startActivity(callIntent);

【讨论】:

【参考方案3】:
       try this:

    final int PERMISSION_REQUEST_CODE = 111;

       if (driverMobile != null) 
            if (Build.VERSION.SDK_INT >= 23) 
                // Marshmallow+
                if (!checkCallPhonePermission() || !checkReadStatePermission()) 
                    requestPermission();
                 else 
                    Intent callIntent = new Intent(Intent.ACTION_CALL);
                    callIntent.setData(Uri.parse("tel:" + 1234567899));
                    startActivity(callIntent);
                
             else 
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:" + + 1234567899));
                startActivity(callIntent);
            
         else 

        

//权限

  private void requestPermission() 
    ActivityCompat.requestPermissions(this, new String[]
Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE, 
PERMISSION_REQUEST_CODE);



 private void requestPermissions() 
    ActivityCompat.requestPermissions(this, new String[]
 Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE, 
 PERMISSION_REQUEST_CODES);
 


 private boolean checkCallPhonePermission() 
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE);
    if (result == PackageManager.PERMISSION_GRANTED) 
        return true;
     else 
        return false;
    


private boolean checkReadStatePermission() 
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
    if (result == PackageManager.PERMISSION_GRANTED) 
        return true;
     else 
        return false;
    




  @Override
 public void onRequestPermissionsResult(int requestCode, String 
 permissions[], int[] grantResults) 
    switch (requestCode)
    
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == 
 PackageManager.PERMISSION_GRANTED) 
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:" + 123456789
                startActivity(callIntent);
            
            break;
  

  

【讨论】:

我已经尝试了上述所有代码,但没有人在工作 uses-permission android:name="android.permission.ACTION_CALL" Action call is not available in manifest default permissions/ 将此权限放入清单并使用上述代码 我已经设置了这个权限 但它仍然无法识别符号 ACTION_CALL Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + "+123456789"));开始活动(意图);使用这个【参考方案4】:

请改成这个 -

public class SOSCallHelp extends AppCompatActivity 
    private Button call1;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_soscall_help);
        call1 = (Button) findViewById(R.id.call1);

        call1.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:9078784565"));
                if (ActivityCompat.checkSelfPermission(SOSCallHelp.this,
                        Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED)

                
                    return;
                
                PackageManager packageManager = getActivity().getPackageManager();
                if (callIntent.resolveActivity(packageManager) != null) 
                    startActivity(callIntent);
                 else 
                    Log.d("SOSCallHelp", "No Intent available to handle this action");
                


            
        );
    

【讨论】:

【参考方案5】:

只需使用:

 private static int REQUEST_CALL_PHONE = 111;

 private void requestCallPhonePermission() 
    String callPermission = android.Manifest.permission.CALL_PHONE;
    int hasPermission = ContextCompat.checkSelfPermission(SOSCallHelp.this, callPermission);
    String[] permissions = new String[]callPermission;
    if (hasPermission != PackageManager.PERMISSION_GRANTED) 
        requestPermissions(permissions, REQUEST_CALL_PHONE);
     else 
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:9078784565"));
        startActivity(intent);
    


@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == REQUEST_CALL_PHONE) 
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) 

            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:9078784565"));
            startActivity(intent);
         else 
            Toast.makeText(SOSCallHelp.this, "CALL_PHONE DENIED", Toast.LENGTH_SHORT).show();

        
    


现在在按钮点击时调用这个requestCallPhonePermission()函数

在清单文件中添加&lt;uses-permission android:name="android.permission.CALL_PHONE" /&gt; 权限。

【讨论】:

嘿,此代码打开 atleat 拨号屏幕并拨打号码,但不拨打电话会出现安全异常 不完全是。这里发生了什么,在某些设备上,它在其他设备上成功拨打电话,但在某些设备上,它只是拨打号码,但无法连接到拨号器屏幕上的特定号码。如果您有任何想法解决此版本支持问题,那么请告诉我。谢谢。 @AnkitaSethi 告诉我它不工作的 android 操作系统版本。它将适用于所有设备。这是我的工作代码 Android 6.0 版本,型号名称 Lenovo K50a40 也有一些其他更高版本,但在 4.2.2 下工作正常 @AnkitaSethi 你用过我的代码吗??你能把你的代码寄给我吗?

以上是关于在android中单击按钮拨打电话的主要内容,如果未能解决你的问题,请参考以下文章

Android点击按钮拨打电话

使用 Kotlin Android Studio 拨打电话

H5 唤起拨打电话功能

Android拨打电话

android中拨打电话的几种实现

拨打电话号码列表并返回活动