当前位置:   article > 正文

Android 10.0 &&Android 11 去掉应用使用usb设备权限给于的弹窗并且自动获取usb权限_android 取消usb弹框确认

android 取消usb弹框确认

Rk3568 Android 10.0 &&Android 11 去掉应用使用usb设备权限给于的弹窗并且自动获取usb权限


前言

在进行Frameworks开发过程中遇到需要客户app 需要使用usb权限,在插入usb设备的时候会有一个弹窗提示是否允许客户应用使用usb设备,并且在每次插入usb设备的时候客户应用都会弹窗


一、需要参考的文件

/android/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
  • 1

二、文件描述

通过查看文件中的oncreat方法可得知:通过setupAlert(); 设置对话框参数并显示对话框。最后解决办法一目了然。可以直接屏蔽此方法,然后再默认给于权限就可以了

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();
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

2.修改如下

代码如下:

--- 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
     }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最终发现在usb设备插入之后应用不在弹出权限复选框。

总结

可以通过弹出框字段,查询到此字段的id号,最终通过id查询到使用此字段的位置,最终找到调用权限复选框的位置,最终解决问题。

每日赠言

很多失败不是因为能力有限,而是因为没有坚持到底。凡事都需要给自己一个坚持到底的理由,就算最后的结果不如意,但是你依旧收获了这个过程!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/330468
推荐阅读
相关标签
  

闽ICP备14008679号