安卓源码环境屏蔽USB摄像头默认启动应用、摄像头应用权限弹出层

  • 问题分析:
    每次插入usb摄像头时,都会弹出两个提示框:
    要允许xxx应用访问xxx设备吗?
    要打开xxx应用来处理xxx设备吗?

根据系统UI提示信息判断是哪个源码文件的问题

#进入提示页面查看是哪两个提示框
cd /home/yihao/alps-release-p0.mp1-V5/frameworks/base/packages/SystemUI/res/values-zh-rCN/

最后找到是UsbPermissionActivity.java和UsbConfirmActivity.java文件,使用命令:

jgrep UsbPermissionActivity

稍等几分钟,搜索结果:(注意XY6765开发板需要改vendor目录下的源码)

yihao@yihao-PowerEdge-R720:~/alps-release-p0.mp1-V5$ jgrep UsbPermissionActivity
./frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java:55:public class UsbPermissionActivity extends AlertActivity
./frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java:58:    private static final String TAG = "UsbPermissionActivity";
./frameworks/base/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java:220:                "com.android.systemui.usb.UsbPermissionActivity");
./frameworks/base/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java:228:            Slog.e(TAG, "unable to start UsbPermissionActivity");
./frameworks/base/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java:261:        // start UsbPermissionActivity so user can choose an activity
./vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java:55:public class UsbPermissionActivity extends AlertActivity
./vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java:58:    private static final String TAG = "UsbPermissionActivity";

更改UsbPermissionActivity.java代码:

#按包名放行
if(!mPackageName.contains("usbcameratest8")&&!mPackageName.contains("excelsior")){
            setupAlert();
        } else{
            mPermissionGranted=true;
            finish();
        }


#或者如下,全部放行
//setupAlert();//不使用窗口
 mPermissionGranted = true;
 finish();

更改UsbConfirmActivity.java代码:

@Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        Intent intent = getIntent();
        mDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
        mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
        mResolveInfo = (ResolveInfo) intent.getParcelableExtra("rinfo");

        PackageManager packageManager = getPackageManager();
        String appName = mResolveInfo.loadLabel(packageManager).toString();

        final AlertController.AlertParams ap = mAlertParams;
        ap.mTitle = appName;
        if (mDevice == null) {
            ap.mMessage = getString(R.string.usb_accessory_confirm_prompt, appName,
                    mAccessory.getDescription());
            mDisconnectedReceiver = new UsbDisconnectedReceiver(this, mAccessory);
        } else {
            ap.mMessage = getString(R.string.usb_device_confirm_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;

        // add "always use" checkbox
        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);


        /****@zxw 更改部分开始,屏蔽确认层******/
//        setupAlert();
        try {
            IBinder b = ServiceManager.getService(USB_SERVICE);
            IUsbManager service = IUsbManager.Stub.asInterface(b);
            final int uid = mResolveInfo.activityInfo.applicationInfo.uid;
            final int userId = UserHandle.myUserId();
//            boolean alwaysUse = mAlwaysUse.isChecked();
            boolean alwaysUse = true; //默认一直使用
//            Intent intent = null;

            if (mDevice != null) {
//                intent = new Intent(UsbManager.ACTION_USB_DEVICE_ATTACHED);
//                intent.putExtra(UsbManager.EXTRA_DEVICE, mDevice);

                // grant permission for the device
                service.grantDevicePermission(mDevice, uid);
                // set or clear default setting
                if (alwaysUse) {
                    service.setDevicePackage(
                            mDevice, mResolveInfo.activityInfo.packageName, userId);
                } else {
                    service.setDevicePackage(mDevice, null, userId);
                }
            } else if (mAccessory != null) {
//                intent = new Intent(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
//                intent.putExtra(UsbManager.EXTRA_ACCESSORY, mAccessory);

                // grant permission for the accessory
                service.grantAccessoryPermission(mAccessory, uid);
                // set or clear default setting
                if (alwaysUse) {
                    service.setAccessoryPackage(
                            mAccessory, mResolveInfo.activityInfo.packageName, userId);
                } else {
                    service.setAccessoryPackage(mAccessory, null, userId);
                }
            }

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setComponent(
                    new ComponentName(mResolveInfo.activityInfo.packageName,
                            mResolveInfo.activityInfo.name));
            startActivityAsUser(intent, new UserHandle(userId));
        } catch (Exception e) {
            Log.e(TAG, "Unable to start activity", e);
        }

        finish();
        /****@zxw 更改部分结束,屏蔽确认层******/
    }

执行编译命令

make -j24 2>&1 | tee build.log 

更改完代码后,执行刷机命令:

$adb reboot bootloader
$fastboot flash system system.img #烧写system镜像到system分区
#烧写全部内容
$ fastboot flashall -w  //这个 -w 是为了wipes the /data partition擦除/data分区
$fastboot reboot

附录

中间修改代码后有报错,可以通过该提示找到编译后的jar包位置

[ 30% 32/104] Target Java: out/target/common/obj/APPS/MtkSystemUI_intermediates/classes-full-debug.jar

参考文章

https://blog.csdn.net/hubbybob1/article/details/50263925

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343