app上架-您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。

上架提示

您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。

测试步骤:管理-添加-点击二维码,申请相机权限

修改建议:APP在调用终端敏感权限时,应同步说明权限申请的使用目的,包括但不限于申请权限的名称、服务的具体功能、用途;告知方式不限于弹窗、蒙层、浮窗、或者自定义操作系统权限弹框等。请排查应用内所有权限申请行为,确保均符合要求。

当看到这个提示时我也是一脸懵B啊!!!华为你在搞事情啊!

打工人何必为难打工人!!!

先看华为官网给的示例应该怎么解决!

应用申请的权限,都必须有明确、合理的使用场景和功能说明,禁止诱导或误导用户授权,应用使用的权限必须与申请所述的一致。在申请敏感权限时,需同步告知用户申请该权限的目的。未经用户同意,不得更改用户权限授权状态。

下面时示例:

image.png

我的解决方式

我是使用的 Snackbar 这种方式来解决的;

Snackbar 是 Android design support library 中的一个组件,它的作用和Toast类似,显示吐司,但Snackbar的特别之处在于Snackbar显示的提示信息可以和用户交互,更好地获取用户反馈信息。同时,它显示的吐司带有动画效果,从屏幕下方慢慢展开显示。 Goggle官方这样介绍:“SnackBars提供了一个轻量级的反馈操作。他们在屏幕的底部显示一条简短的信息,如果是较大的设备就显示在左下角。SnackBar出现在屏幕中所有其他元素的上方,同一时间仅仅只有一条SnackBar”。总之,SnackBar的特点大致下面几条: ①与Toast一样可以进行吐司信息; ②可以与用户交互操作; ③一个时刻只能有唯一一个 Snackbar 显示。

上代码

 


public class SnackBarUtil {/*** 自定义 SnackBar 布局** @param activity a* @param view     a* @param msg      a* @param tip      as*/public static void show(Activity activity, View view, String msg, String tip) {try {//获取示例 findViewById(android.R.id.content) //LENGTH_LONG/LENGTH_SHORT: 会自动消失 LENGTH_INDEFINITE: 需要手动点击消失Snackbar snackbar = Snackbar.make(view, "", Snackbar.LENGTH_LONG);//设置 Snackbar 的深度,避免被其他控件遮挡if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {snackbar.getView().setElevation(0);}//设置背景透明,避免自带黑色背景影响snackbar.getView().setBackgroundColor(Color.TRANSPARENT);//设置padding 取消自定义时黑色边框snackbar.getView().setPadding(0, 0, 0, 0);Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView();//设置SnackBar的显示位置//ViewGroup.LayoutParams layoutParams = snackbarLayout.getLayoutParams();FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); // 将原来Snackbar的宽高传入新的LayoutParamsflp.gravity = Gravity.CENTER | Gravity.TOP; // 设置显示位置flp.topMargin = StatusBarCompat.getStatusBarHeight(activity);((View) snackbarLayout).setLayoutParams(flp);//获取自定义布局//LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);View inflate = LayoutInflater.from(activity).inflate(R.layout.snack_bar_layout, null);//获取布局内控件TextView textView = inflate.findViewById(R.id.snacl_bar_title);//设置文本textView.setText(msg);TextView textViewSub = inflate.findViewById(R.id.snacl_bar_tip);textViewSub.setText(tip);//将自定义布局添加到 Snackbar 中snackbarLayout.addView(inflate);//显示 因为只有华为上架出现这个问题,我做了个判断if ("huawei".equals(Build.MANUFACTURER.toLowerCase())) {snackbar.show();}} catch (Exception e) {}}}

使用

boolean b = new PermissionsChecker(this).lacksPermissions(Permission.CAMERA);
if (b) {SnackBarUtil.show(this, llItem2, "相机权限说明:", "用于扫二维码操作");
}

效果

image.png

snack_bar_layout布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginStart="14dp"android:layout_marginEnd="14dp"android:background="@drawable/bg_white_cor10"android:orientation="vertical"android:padding="10dp"><TextViewandroid:id="@+id/snacl_bar_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="标题"android:textColor="@color/color33"android:textSize="20sp" /><TextViewandroid:id="@+id/snacl_bar_tip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="6dp"android:text="提示"android:textColor="@color/color33"android:textSize="16sp" /></LinearLayout>
</FrameLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283948.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt6 QFileDialog文件对话框控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计49条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

微店商品API:电商的实时数据利器

一、引言 随着电商行业的快速发展&#xff0c;越来越多的消费者选择通过电商平台进行购物。微店作为电商领域的一种新型模式&#xff0c;凭借其便捷性和个性化服务&#xff0c;吸引了大量用户。为了满足用户对商品信息的快速获取需求&#xff0c;微店提供了商品详情API接口。本…

Spark编程实验二:RDD编程初级实践

目录 一、目的与要求 二、实验内容 三、实验步骤 1、pyspark交互式编程 2、编写独立应用程序实现数据去重 3、编写独立应用程序实现求平均值问题 4、三个综合实例 四、结果分析与实验体会 一、目的与要求 1、熟悉Spark的RDD基本操作及键值对操作&#xff1b; 2、熟悉使…

如何记录函数递归的次数----静态局部变量的使用

记录函数递归的次数,不像是其他普通的函数,只需要一个简单的局部变量作为计数器,每次就好了,函数递归是不断地调用函数,换言之,如果你将一个局部变量定义在函数的内部,那么每次递归都会创建一个这样的变量,每次的值都会初始化,这样也就达不到记录递归次数的目的. 为了解决这个…

极狐GitLab DevSecOps 之容器镜像安全扫描

容器镜像安全 现状 最近某银行遭受供应链攻击的事件传的沸沸扬扬&#xff0c;安全又双叒叕进入了人们的视野。安全确实是一个非常重要&#xff0c;但是又最容易被忽略的话题。但是现在到了一个不得不人人重视安全&#xff0c;人人为安全负责的时代。尤其以现在非常火爆的云原…

【LeetCode: 2276. 统计区间中的整数数目 | 线段树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

龙芯loongarch64安装numpy报错“No module named ‘numpy.core._multiarray_umath‘”

前言 在之前编译安装Python3.8的文章中说明了,龙芯仓库的很多包都有问题,安装之后很多无法使用,比如安装numpy后,就会出现“No module named numpy.core._multiarray_umath” 问题复现 配置pip源 vim /etc/pip.conf 复制下面的内容并保存 [global] timeout = 60 index-url…

抖店怎么快速起店?不掺杂汤汤水水,全是干货!

我是电商珠珠 我做抖店也已经有三年的时间了&#xff0c;团队也从原来的几人扩大到了70。对于抖店的玩法已经完全摸透熟通&#xff0c;在做店的同时也会带着学生一起做店&#xff0c;他们经常问的问题就是抖店怎么快速起店。 今天&#xff0c;我就来给大家做个分享。根据我的…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Text文本组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之文本组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、文本组件 Text 是显示文本的基础组件之一&#xff0c;它可以包含子组件 Span &…

Python 自动化之收发邮件(一)

imapclient / smtplib 收发邮件 文章目录 imapclient / smtplib 收发邮件前言一、基本内容二、发送邮件1.整体代码 三、获取邮件1.整体代码 总结 前言 简单给大家写个如何用Python进行发邮件和查看邮件教程&#xff0c;希望对各位有所帮助。 一、基本内容 本文主要分为两部分…

选择排序、快速排序和插入排序

1. 选择排序 xuanze_sort.c #include<stdio.h> #include<stdlib.h>//选择排序void xuanze_sort(int arr[],int sz){//正着for(int i0;i<sz;i){//外层循环从第一个数据开始依次作为基准数据for(int j i1;j<sz;j){//int j i1 因为第一个数据作为了基准数据&…

挑战内网安全难题,迅软DSE如何以管控之力助您一臂之力?

随着信息化程度的提高&#xff0c;政企单位面临更加复杂和不可控的内网安全问题。由于缺乏有效技术手段和完善的管理机制&#xff0c;企业内网管理长期处于被动状态&#xff0c;而在发生数据安全事件后的快速处置能力也相对薄弱。 迅软DSE桌面管理系统成为解决方案&#xff0c…