Android 10.0 &&Android 11 去掉应用使用usb设备权限给于的弹窗并且自动获取usb权限
Rk3568 Android 10.0 &&Android 11 去掉应用使用usb设备权限给于的弹窗并且自动获取usb权限
文章目录
- Rk3568 Android 10.0 &&Android 11 去掉应用使用usb设备权限给于的弹窗并且自动获取usb权限
- @[TOC](文章目录)
- 前言
- 一、需要参考的文件
- 二、文件描述
- 2.修改如下
- 总结
- 每日赠言
前言
在进行Frameworks开发过程中遇到需要客户app 需要使用usb权限,在插入usb设备的时候会有一个弹窗提示是否允许客户应用使用usb设备,并且在每次插入usb设备的时候客户应用都会弹窗
(图片来源网络,侵删)
一、需要参考的文件
Python
/android/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
二、文件描述
通过查看文件中的oncreat方法可得知:通过setupAlert(); 设置对话框参数并显示对话框。最后解决办法一目了然。可以直接屏蔽此方法,然后再默认给于权限就可以了
Python
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// 获取传入的意图
Intent intent = getIntent();
// 从意图中获取USB设备和USB附件对象
mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
// 从意图中获取待处理的Intent、UID和包名
mPendingIntent = (PendingIntent)intent.getParcelableExtra(Intent.EXTRA_INTENT);
mUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
mPackageName = intent.getStringExtra(UsbManager.EXTRA_PACKAGE);
// 从包管理器中获取应用信息
PackageManager packageManager = getPackageManager();
ApplicationInfo aInfo;
try {
aInfo = packageManager.getApplicationInfo(mPackageName, 0);
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "unable to look up package name", e);
finish();
return;
}
String appName = aInfo.loadLabel(packageManager).toString();
final AlertController.AlertParams ap = mAlertParams;
ap.mTitle = appName;
// 根据设备类型设置消息文本
if (mDevice == null) {
ap.mMessage = getString(R.string.usb_accessory_permission_prompt, appName,
mAccessory.getDescription());
mDisconnectedReceiver = new UsbDisconnectedReceiver(this, mAccessory);
} else {
ap.mMessage = getString(R.string.usb_device_permission_prompt, appName,
mDevice.getProductName());
mDisconnectedReceiver = new UsbDisconnectedReceiver(this, mDevice);
}
ap.mPositiveButtonText = getString(android.R.string.ok);
ap.mNegativeButtonText = getString(android.R.string.cancel);
ap.mPositiveButtonListener = this;
ap.mNegativeButtonListener = this;
// 如果应用可以成为默认处理程序并且存在USB设备或附件,则添加“打开时”复选框
if (canBeDefault && (mDevice != null || mAccessory != null)) {
LayoutInflater inflater = (LayoutInflater) getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
// 设置自定义视图
ap.mView = inflater.inflate(com.android.internal.R.layout.always_use_checkbox, null);
mAlwaysUse = (CheckBox) ap.mView.findViewById(com.android.internal.R.id.alwaysUse);
// 根据设备类型设置“总是使用”复选框文本
if (mDevice == null) {
mAlwaysUse.setText(getString(R.string.always_use_accessory, appName,
mAccessory.getDescription()));
} else {
mAlwaysUse.setText(getString(R.string.always_use_device, appName,
mDevice.getProductName()));
}
mAlwaysUse.setOnCheckedChangeListener(this);
mClearDefaultHint = (TextView)ap.mView.findViewById(
com.android.internal.R.id.clearDefaultHint);
mClearDefaultHint.setVisibility(View.GONE);
}
// 设置对话框参数并显示对话框
setupAlert();
}
2.修改如下
代码如下:
Python
--- a/android/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
+++ b/android/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
@@ -116,8 +116,11 @@ public class UsbPermissionActivity extends AlertActivity
com.android.internal.R.id.clearDefaultHint);
mClearDefaultHint.setVisibility(View.GONE);
}
-
- setupAlert();
+//add by ltj 解决应用使用usb设备权限查询相应问题并且自动获取usb权限
+ // setupAlert();
+ mPermissionGranted = true;
+ finish();
+ //add end by ltj
}
最终发现在usb设备插入之后应用不在弹出权限复选框。
总结
可以通过弹出框字段,查询到此字段的id号,最终通过id查询到使用此字段的位置,最终找到调用权限复选框的位置,最终解决问题。
每日赠言
很多失败不是因为能力有限,而是因为没有坚持到底。凡事都需要给自己一个坚持到底的理由,就算最后的结果不如意,但是你依旧收获了这个过程!!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!