Android 安卓手机通话不起作用
我只想从我的应用程序中执行电话呼叫。我尝试了所有其他方法 我厌倦了所有来自互联网的解决方案,包括mkyong、tutorialspoint和更多Android 安卓手机通话不起作用,android,phone-call,Android,Phone Call,我只想从我的应用程序中执行电话呼叫。我尝试了所有其他方法 我厌倦了所有来自互联网的解决方案,包括mkyong、tutorialspoint和更多 phoneCalls.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { Intent callIntent = new Intent(In
phoneCalls.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:0377778888"));
if (ActivityCompat.checkSelfPermission(getActivity(),
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
startActivity(callIntent);
}
});
在我的舱单里,我请求允许:
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
尝试此代码时,logcat显示以下错误:
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{80f03c 26994:com.example.user.home/u0a73} (pid=26994, uid=10073) with revoked permission android.permission.CALL_PHONE
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2680)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1509)
at android.app.Activity.startActivityForResult(Activity.java:3930)
at android.app.Activity.startActivityForResult(Activity.java:3890)
at android.app.Activity.startActivity(Activity.java:4213)
at android.app.Activity.startActivity(Activity.java:4181)
at com.example.user.home.Main3Activity$1.onClick(Main3Activity.java:30)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21158)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
希望我把这个问题留在这里。有人请帮忙,因为您正在Marshmallow 6.0上试用,并且您没有为Marshmallow或更高版本的android设置运行时权限 您的代码将在低于6.0的版本中运行,但不会在6.0或更高版本中运行 用这个来回复您的代码。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0)
{
callPhoneNumber();
}
});
}
使用权限检查创建此调用方法
public void callPhoneNumber()
{
try
{
if(Build.VERSION.SDK_INT > 22)
{
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
ActivityCompat.requestPermissions(TestActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 101);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + "0377778888"));
startActivity(callIntent);
}
else {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + "0377778888"));
startActivity(callIntent);
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
当用户授予权限时,控件会出现在此处
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults)
{
if(requestCode == 101)
{
if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
callPhoneNumber();
}
else
{
Log.e(TAG, "Permission not Granted");
}
}
}
您正在哪个操作系统上尝试?api 23 android Marshmallow您是否从用户处实现运行时权限请求您的应用程序没有启动电话的权限。就这样。在您的代码中,您尝试在不检查应用程序是否具有启动权限的情况下启动电话。在代码的另一部分,你只需检查它是否有权限,如果应用程序没有权限,你就不会执行请求。非常感谢。这是绝对全面的解决方案。我很高兴:)
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults)
{
if(requestCode == 101)
{
if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
callPhoneNumber();
}
else
{
Log.e(TAG, "Permission not Granted");
}
}
}