android 高版本有些权限除了在manifest文件中静态添加,还需要动态请求
具体请求方法如下(以拨打电话为例):
这种方法是直接呼出电话
- 在manifest文件中添加权限
- Java代码动态请求【xml代码就只有一个Button,所以就不列出了】
import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.Button; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; public class MoreInfoActivity extends AppCompatActivity { private static final String TAG = "MoreInfoActivity"; private Button mBtnPhone; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_more_info); initView(); // 拨打电话按钮的监听事件 mBtnPhone.setOnClickListener(v -> { request_permission(); }); } private void request_permission() { // 如果CALL_PHONE权限没有被赋予 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { // 请求权限 // permissions请求的权限 // requestCode:应用程序特定的请求代码以匹配报告给OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])} // 也就是下面回调的onRequestPermissionResult()方法 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},10010); Log.d(TAG, "request_permission():正在申请权限!"); }else { Log.d(TAG, "request_permission():已经拥有权限!"); callUp(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 10010: // 电话权限 // 如果权限授予结果为PERMISSION_GRANTED,那么表示权限授予成功! if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { callUp(); Log.d(TAG, "onRequestPermissionsResult(): 获取权限,可以拨打电话!"); }else { Log.d(TAG, "onRequestPermissionsResult(): 权限已拒绝!"); } break; } } private void callUp() { Intent intent = new Intent(); // 设置要执行的一般 *** 作 // action: *** 作名称。特定与应用程序的 *** 作应以供应商的包名为前缀 intent.setAction(Intent.ACTION_CALL); // 设置意图正在 *** 作的数据 // tel:是必须要添加的参数,后面拼接的字符串为电话号 intent.setData(Uri.parse("tel:" + "10010")); startActivity(intent); } private void initView() { mBtnPhone = findViewById(R.id.btn_phone); } }方法2:
这种方法只是调用拨打电话,输入电话号,并不呼出
- 在manifest文件中添加权限
- java代码
直接在按钮的点击事件中添加即可 private void callUp(String phoneNumber) { Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:" + phoneNumber)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)