2016-05-16 52 views
1

如何申请Permisson?我尝试了dcumentation,但是常量int请求代码MY_PERMISSIONS_REQUEST_CALL_PHONE donst似乎只是工作,为了向后兼容性还需要记住其他任何事情?Android Permisson请求代码问题

ActivityCompat.requestPermissions(getApplicationContext(), 
          new String[]{Manifest.permission.READ_CONTACTS}, 
          MY_PERMISSIONS_REQUEST_CALL_PHONE); 

如何声明MY_PERMISSIONS_REQUEST_CALL_PHONE常量int?

+0

也许这将是有用的为你http://stackoverflow.com/a/36787464/3436179 – Alexander

+0

检查这个裁判:http://www.tutorialspoint.com/android/android_phone_calls.htm –

回答

4

对于较低的版本,则需要在清单只, 申报权限,但对于MARSHMELLOW你需要给它的代码,您要执行的代码。

在这里,你想打个电话。因此,在编写的代码块中插入/包含下面提供的代码以进行呼叫。

public void makeCall() 
    { 
     Intent intent = new Intent(Intent.ACTION_CALL); 
     intent.setData(Uri.parse("tel:" + "123456")); 
     int result = ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE); 
     if (result == PackageManager.PERMISSION_GRANTED){ 

      startActivity(intent); 

     } else { 

      requestForCallPermission(); 
     } 
    } 

    private void requestPermission() 
    { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.CALL_PHONE)) 
     { 
     } 
     else { 

      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE); 
     } 
    } 

    @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) { 
       makeCall(); 
      } 
      break; 
     } 
    } 
+0

是的,我明白,但如何delcare PERMISSION_REQUEST_CODE – ueen

+1

对不起,我忘了通知你,你需要在下面的顶部声明它像private static final int PERMISSION_REQUEST_CODE = 1; – Vickyexpert

+0

还可以通过CALL_PHONE而不是ACCESS_FINE_LOCATION在else部分更改requestPermission()方法中的权限 – Vickyexpert

0
  if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
       // TODO: Consider calling 
       // ActivityCompat#requestPermissions 
       // here to request the missing permissions, and then overriding 
       // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
       //           int[] grantResults) 
       // to handle the case where the user grants the permission. See the documentation 
       // for ActivityCompat#requestPermissions for more details. 
       return; 
      } 
Intent intent = new Intent(Intent.ACTION_CALL); 
      intent.setData(Uri.parse("tel:" + "123456")); 
      startActivity(intent); 

试着做这个。

+0

感谢它开始工作,我想我把如果之前的startActivity :) – ueen

+0

是的,这是唯一的问题。保持学习。 :) –

0

尝试下面的代码希望它会帮助你。 首先,在允许拨打电话号码后,会要求您提供允许弹出窗口。

if (ContextCompat.checkSelfPermission(HomePanelActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(HomePanelActivity.this, 
        Manifest.permission.CALL_PHONE)) { 
       ActivityCompat.requestPermissions(HomePanelActivity.this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION); 
      } 
     } else { 
      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:" + phoneNumber)); 
      if (ActivityCompat.checkSelfPermission(HomePanelActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { 
       startActivity(callIntent); 
      } 
     } 

@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 10: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Intent callIntent = new Intent(Intent.ACTION_CALL); 
        callIntent.setData(Uri.parse("tel:" + phoneNumberToCall)); 
        if (ActivityCompat.checkSelfPermission(HomePanelActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { 
         startActivity(callIntent); 
        } 
       } else { 
        Snackbar.make(drawerLayout, "You Deny permission", Snackbar.LENGTH_SHORT).show(); 
       return; 
      } 
     } 
    }; 
+0

我需要在启动时使用Permisson,并在点击按钮时进行调用。 而我需要的权限,所以否认是没有选择... – ueen

+0

这个请求者API23我的应用程序是minSDK 15 – ueen

+0

是的,你需要编译SDK版本为23.最低15将工作。 –

6
public void makeCall(String s) 
{ 
    Intent intent = new Intent(Intent.ACTION_CALL); 
    intent.setData(Uri.parse("tel:" + s)); 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){ 

     requestForCallPermission(); 

    } else { 
     startActivity(intent); 

    } 
} 
public void requestForCallPermission() 
{ 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE)) 
    { 
    } 
    else { 

     ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},PERMISSION_REQUEST_CODE); 
    } 
} 

@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) { 
       makeCall("100"); 
      } 
      break; 
    } 
} 

//现在调用方法MakeCall函数( “your_desire_phone_numder”); makeCall(“100”); Link for more details