android 调用拨打电话,程序崩溃

FATAL EXCEPTION: main
03-27 17:43:08.012: E/AndroidRuntime(18523): Process: com.mtq.freighthelper, PID: 18523
03-27 17:43:08.012: E/AndroidRuntime(18523): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxx-xxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{1f529f5 18523:com.mtq.freighthelper/u0a491} (pid=18523, uid=10491) with revoked permission android.permission.CALL_PHONE
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.os.Parcel.readException(Parcel.java:1620)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.os.Parcel.readException(Parcel.java:1573)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2681)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1509)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.Activity.startActivityForResult(Activity.java:3978)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.Activity.startActivityForResult(Activity.java:3939)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.Activity.startActivity(Activity.java:4262)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.Activity.startActivity(Activity.java:4230)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at com.mtq.freighthelper.ui.activity.contacts.ContactsDetailActivity.onClick(ContactsDetailActivity.java:97)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.view.View.performClick(View.java:5207)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.view.View$PerformClick.run(View.java:21177)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.os.Handler.handleCallback(Handler.java:739)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.os.Handler.dispatchMessage(Handler.java:95)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.os.Looper.loop(Looper.java:148)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at android.app.ActivityThread.main(ActivityThread.java:5438)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at java.lang.reflect.Method.invoke(Native Method)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
03-27 17:43:08.012: E/AndroidRuntime(18523):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)

使用设备:小米4

android: 6.0

程序报java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxx-xxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{1f529f5 18523:com.mtq.freighthelper/u0a491} (pid=18523, uid=10491) with revoked permission

原因:

在6.0 系统中请求某些权限需要检查权限

 1 if (!TextUtils.isEmpty(phone)) {
 2                 if (!hasPermission()) {
 3                     // 在6.0 系统中请求某些权限需要检查权限
 4                     int curApiVersion = Build.VERSION.SDK_INT;
 5                     if (curApiVersion >= Build.VERSION_CODES.M) {
 6                         // 动态请求拨打电话权限
 7                         requestPermissions(
 8                                 new String[] { Manifest.permission.CALL_PHONE },
 9                                 0x11);
10                     } else {
11                         intentToCall(phone);
12                     }
13                 } else {
14                     intentToCall(phone);
15                 }
16             }
 1 private boolean hasPermission() {
 2         if (checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
 3             return false;
 4         }
 5         return true;
 6     }
 7
 8     private void intentToCall(String phoneNumber) {
 9         Intent intent = new Intent(Intent.ACTION_CALL);
10         Uri data = Uri.parse("tel:" + phoneNumber);
11         intent.setData(data);
12         startActivity(intent);
13     }
14
15
16     /**
17      * 动态请求拨打电话权限后,监听用户的点击事件
18      */
19     @Override
20     public void onRequestPermissionsResult(int requestCode,
21             String[] permissions, int[] grantResults) {
22         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
23         if (requestCode == 0x11) {
24             // If request is cancelled, the result arrays are empty.
25             if (grantResults.length > 0
26                     && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
27                 CldLog.i("CMCC", "权限被允许");
28                 String phone = mContactsInfo.getPhone();
29                 intentToCall(phone);
30             } else {
31                 CldLog.i("CMCC", "权限被拒绝");
32             }
33         }
34     }
时间: 2025-01-01 16:01:01

android 调用拨打电话,程序崩溃的相关文章

Android调用拨打电话 代码

package auscend.sdk; import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditTe

Android中如何调用拨打电话?

Android系统原本就为手机设计,所以,在android系统中的任何App中,只要愿意,拨打指定电话非常方便. 核心就是使用Intent跳转,指定请求Action为Intent.ACTION_CALL 即可. [源码下载] http://www.code4apk.com/android-code/178 核心代码如下: 1 Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:13888888888"); 下面一起来

Android手机拨打电话的开发实例

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

Android的BluetoothSocket调用Close时程序崩溃

问题描述 RT. /* 停止客户端连接 */ private void shutdownClient() { new Thread() { public void run() { if (clientConnectThread != null) { clientConnectThread.interrupt(); Log.i("1111111111111111111111111111111", "5555555555555555555555555555555555"

Android 直接拨打电话界面

Android 拨号界面和直接拨打电话界面代码控制 //定义TAG为空 private static final String TAG = null; //定义Button的点击事件 tell.setOnClickListener(new View.OnClickListener() {    @Override  public void onClick(View v) {   // TODO Auto-generated method stub /*  Intent intent = new

ios app跳转拨打电话界面,调用拨打电话功能

DNLogFUNC //两种方法都可以用 //这种据说是可以上appstore NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",PhoneNumber]]; if ( !_phoneCallWebView ) { _phoneCallWebView = [[UIWebView alloc] initWithFrame:CGRectZero]; } [_phoneCallWebView

java 学习第11课,android 实现拨打电话的功能

1. 先布局界面,界面采用线性垂直方式来布局 在layout 界面文件中 activity_main.xml 中 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation=&

iOS 两种调用拨打电话方式

iOS常用的打电话方式 第一种: [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"tel://1008611"]]; 第二种: UIWebView *webView; if (webView == nil) { webView = [[UIWebView alloc] init]; } NSString *phoneStr = [NSString stringWithFormat:@"tel://

Android实例-拨打电话

(1)项目结构如下: (2)MainActivity.java package com.example.phonecall; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.But