在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/请改成这个 -
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()
函数
在清单文件中添加<uses-permission android:name="android.permission.CALL_PHONE" />
权限。
【讨论】:
嘿,此代码打开 atleat 拨号屏幕并拨打号码,但不拨打电话会出现安全异常 不完全是。这里发生了什么,在某些设备上,它在其他设备上成功拨打电话,但在某些设备上,它只是拨打号码,但无法连接到拨号器屏幕上的特定号码。如果您有任何想法解决此版本支持问题,那么请告诉我。谢谢。 @AnkitaSethi 告诉我它不工作的 android 操作系统版本。它将适用于所有设备。这是我的工作代码 Android 6.0 版本,型号名称 Lenovo K50a40 也有一些其他更高版本,但在 4.2.2 下工作正常 @AnkitaSethi 你用过我的代码吗??你能把你的代码寄给我吗?以上是关于在android中单击按钮拨打电话的主要内容,如果未能解决你的问题,请参考以下文章