当前位置: 首页 > news >正文

中国交通建设网官方网站贺州seo

中国交通建设网官方网站,贺州seo,深圳网站维护公司,济宁 网站建设在Android应用中,获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新,从Android 6.0(API级别23)开始,应用需要动态请求权限,而到了android 13以上需要的权限又做了进一步…

        在Android应用中,获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新,从Android 6.0(API级别23)开始,应用需要动态请求权限,而到了android 13以上需要的权限又做了进一步改变。

       1. 需要添加存储权限到AndroidManifest.xml中,android 6.0到android 12只需要存储权限,android 13开始对权限做了更细致的处理,而不是READ_EXTERNAL_STORAGE,拆分成下面三个权限。如果同时请求 READ_MEDIA_IMAGES 权限和 READ_MEDIA_VIDEO 权限,系统只会显示一个系统权限对话框。如果您的应用之前已获得 READ_EXTERNAL_STORAGE 权限,则在升级时,系统会自动授予任何请求的 READ_MEDIA_* 权限。如果您的应用只需要访问图片、照片和视频,优先使用照片选择器,而不是声明 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 权限。如果是只要音频文件同理只需要READ_MEDIA_VIDEO 权限即可。

一般我们获取音频文件,只需要添加下面权限即可

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"tools:ignore="ScopedStorage" android:maxSdkVersion="32"/><uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>

2.动态请求权限

检查是否有获取音频文件权限

    fun checkPermission(context: Context): Boolean {return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {ContextCompat.checkSelfPermission(context,Manifest.permission.READ_MEDIA_AUDIO) == PackageManager.PERMISSION_GRANTED} else {ContextCompat.checkSelfPermission(context,Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED}}

请求权限

    fun requestPermission(activity: Activity, requestCode: Int) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {ActivityCompat.requestPermissions(activity,arrayOf(Manifest.permission.READ_MEDIA_AUDIO,Manifest.permission.POST_NOTIFICATIONS), requestCode)} else {ActivityCompat.requestPermissions(activity,arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),requestCode)}}

一般我们写成一个数组里面一起去请求

  private static final String[] permissionsArray = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO};private static final String[] permissionsArray13 = new String[]{Manifest.permission.READ_MEDIA_AUDIO,Manifest.permission.RECORD_AUDIO,Manifest.permission.POST_NOTIFICATIONS};private void checkRequiredPermission(final Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {for (String permission : permissionsArray13) {if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {permissionsList.add(permission);}}} else {for (String permission : permissionsArray) {if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {permissionsList.add(permission);}}}if (permissionsList != null && permissionsList.size() > 0) {ActivityCompat.requestPermissions(activity, permissionsList.toArray(new String[permissionsList.size()]), REQUEST_PERMISSION);} else {//去初始化}}

去请求权限可以用一个对话框去处理会显得更友好

    final PermissionDialog permissionDialog = new PermissionDialog(this, R.color.library_dialog_bg, getString(R.string.permission_title));permissionDialog.setPermissionDialogListener(new PermissionDialog.IPermissionDialogListener() {@Overridepublic void cancelClick() {finish();permissionDialog.cancel();}@Overridepublic void okClick() {boolean isBannedPermission = MusicPermissionUtils.INSTANCE.isBannedPermission(MusicLibraryActivity.this);if (!isBannedPermission) {Utils.goToSettingIntent(MusicLibraryActivity.this);} else {MusicPermissionUtils.INSTANCE.requestPermission(MusicLibraryActivity.this, REQUEST_PERMISSION);}permissionDialog.cancel();}});permissionDialog.show();

处理权限请求结果,如果全部权限都已同意可以去做初始化,一般我们做权限请求最好每个功能点需要用到的权限一个个去请求会更友好。

    @Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case REQUEST_PERMISSION:boolean isAllRequest = false;for (int i = 0; i < permissions.length; i++) {if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {isAllRequest = true;} else {//去请求权限showPermissionDialog();return;}}if (isAllRequest) {//初始化或者继续操作}break;default:super.onRequestPermissionsResult(requestCode, permissions, grantResults);}}

用户如果不同意权限可以跳转到设置找到应用去同意添加权限,用户有可能会拒绝权限请求,最好在界面添加可以继续请求的按钮或者直接跳转到设置里面让用户找到应用去添加需要的权限

    public static void goToSettingIntent(Context context) {Intent localIntent = new Intent();localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT >= 9) {localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));} else if (Build.VERSION.SDK_INT <= 8) {localIntent.setAction(Intent.ACTION_VIEW);localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());}context.startActivity(localIntent);}

音乐权限请求工具代码

object MusicPermissionUtils {fun hasMusicPermission(context: Context): Boolean {val permission = checkPermission(context)if (permission == PackageManager.PERMISSION_GRANTED) {return true}return false}fun isBannedPermission(activity: Activity): Boolean {val isBannedPermission: Boolean =if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.READ_MEDIA_AUDIO)} else {ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.READ_EXTERNAL_STORAGE)}return isBannedPermission}fun requestPermission(activity: Activity, requestCode: Int) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {ActivityCompat.requestPermissions(activity,arrayOf(Manifest.permission.READ_MEDIA_AUDIO,Manifest.permission.POST_NOTIFICATIONS), requestCode)} else {ActivityCompat.requestPermissions(activity,arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),requestCode)}}fun checkReadPermission(context: Context): Boolean {return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {ContextCompat.checkSelfPermission(context,Manifest.permission.READ_MEDIA_AUDIO) == PackageManager.PERMISSION_GRANTED} else {ContextCompat.checkSelfPermission(context,Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED}}fun checkPermission(context: Context): Int {val checkWriteStoragePermission: Int =if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {ContextCompat.checkSelfPermission(context, Manifest.permission.READ_MEDIA_AUDIO)} else {ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)}return checkWriteStoragePermission}}

http://www.hkea.cn/news/426229/

相关文章:

  • 类似红盟的网站怎么做aso优化推广
  • vs2013做网站怎样制作免费网页
  • b2c网站的开发无锡网络优化推广公司
  • 网站做视频在线观看营销活动推广方案
  • wordpress多站点统计google图片搜索引擎入口
  • 麻章手机网站建设百度网盘提取码入口
  • 网站后台管理系统的重要技术指标sem竞价托管费用
  • 包头怎样做网站我想做电商怎么加入
  • 株洲企业网站建设品牌2023免费b站推广大全
  • 仿制单页面网站多少钱免费制作网站app
  • 商城网站制作网站长尾词挖掘工具
  • 夹克定制公司trinseo公司
  • 四川智能网站建设制作网站链接分析工具
  • 制作销售网站有哪些宁波网络营销推广咨询报价
  • 佛山做外贸网站服务新闻发稿平台
  • 做网站前怎么写文档域名收录
  • 中信建设有限责任公司钟宁关键词优化的方法有哪些
  • 建站之星平台优化推广网站排名
  • wordpress 网盘 插件郑州seo外包阿亮
  • 怎样建设网站首页广告营销平台
  • wordpress调起淘宝app什么叫做seo
  • 嘉兴做网站优化的公司网站维护公司
  • css层叠样式会不会影响打开网站的速度百度免费下载安装百度
  • 网站模板制作流程nba交易最新消息汇总
  • 近的网站在线客服系统网络优化工程师前景如何
  • 网站制作职业google入口
  • 广州网站 制作信科便宜网络营销软文范例500
  • 网站建设公开课长沙网站推广和优化
  • 建设网站的需求分析俄罗斯搜索引擎yandex推广入口
  • 可以做英文纵横字谜的网站搜狗网站收录入口