Android允许应用具有安装权限

本文探讨了如何在PackageInstallerActivity中添加逻辑,以判断是否允许安装来自未知来源的应用。checkIfAllowedAndInitiateInstall()函数用于检查安装权限,若不允许,会显示相应对话框。关键在于修改initiateInstall()的判断条件,添加对mOriginatingPackage的检查,以确保只有特定来源的应用才能触发安装。此外,还涉及了DISALLOW_INSTALL_APPS和DISALLOW_INSTALL_UNKNOWN_SOURCES的用户限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     本文只针对调用PackageInstaller安装流程,ROM中有时需要集成一些第三方的应用商城或着launcher,但需要此应用可能具有安装权限,像大部分机顶盒设备,投影设备禁止安装未知来源的控制对用户是不可见的,功能很简单直接贴代码;

     PackageInstallerActivity中有个checkIfAllowedAndInitiateInstall()函数来判断是否允许安装,允许的话会调用initiateInstall()弹出安装应用的界面,禁止安装未知来源的应用时会弹出禁止安装未知来源的dialog;

     PackageInstallerActivity中有个变量mOriginatingPackage,此变量就是调用安装应用事件的应用的包名,只需在initiateInstall()的if判断中加入自己的判断逻辑即可。

/**
*检查是否允许安装包,如果允许,则启动安装。如果不允许
*显示相应的对话框。
*/
    private void checkIfAllowedAndInitiateInstall() {
        // Check for install apps user restriction first.
        final int installAppsRestrictionSource = mUserManager.getUserRestrictionSource(
                UserManager.DISALLOW_INSTALL_APPS, Process.myUserHandle());
        if ((installAppsRestrictionSource & UserManager.RESTRICTION_SOURCE_SYSTEM) != 0) {
            showDialogInner(DLG_INSTALL_APPS_RESTRICTED_FOR_USER);
            return;
        } else if (installAppsRestrictionSource != UserManager.RESTRICTION_NOT_SET) {
            startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS));
            finish();
            return;
        }
        //看这里的判断条件1.允许安装未知来源应用 2.非未知来源应用发起的安装事件
        //3.这是我加的逻辑
        if (mAllowUnknownSources || !isInstallRequestFromUnknownSource(getIntent()) || new StmConfig().isUserCustomAllowInstallPkg(mOriginatingPackage)) {
            initiateInstall();
        } else {
            // Check for unknown sources restriction
            final int unknownSourcesRestrictionSource = mUserManager.getUserRestrictionSource(
                    UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, Process.myUserHandle());
            if ((unknownSourcesRestrictionSource & UserManager.RESTRICTION_SOURCE_SYSTEM) != 0) {
                showDialogInner(DLG_UNKNOWN_SOURCES_RESTRICTED_FOR_USER);
            } else if (unknownSourcesRestrictionSource != UserManager.RESTRICTION_NOT_SET) {
                startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS));
                finish();
            } else {
                handleUnknownSources();
            }
        }
    }

 

OpenWRT路由器上设置只允许访问特定网站的防火墙规则,通常是在`UFW (Uncomplicated Firewall)`工具中操作。以下是一个基本步骤: 1. 登录到OpenWRT管理界面:通过Web浏览器访问路由器的IP地址,默认可能是`http://192.168.1.1`或`http://router_ip`,然后输入用户名和密码。 2. 安装并启用UFW:在终端中运行`su -l root`切换到root权限,然后输入`opkg update && opkg install ufw`安装UFW,之后输入`uci enable firewall`启用它。 3. 设置端口转发:如果你想限制的是HTTP(S)流量,你需要将80(HTTP)或443(HTTPS)端口映射到内网的一个服务器。例如,如果服务器在内网IP `192.168.1.100`,你可以用`ufw allow from any to any port 80:80 proto tcp`。 4. 添加URL过滤规则:UFW本身并不直接支持针对特定网站的规则,但是你可以配合`iptables` 或其他应用如`pi-hole`来阻止除指定网站外的所有请求。例如,可以使用`dnsmasq`配合`blocklist.txt`文件来阻止黑名单中的域名。 5. 配置DNS过滤:在OpenWRT上安装`dnsmasq`,并在`/etc/dnsmasq.conf`中加入`domain-needed`和`bogus-priv`选项,然后创建一个阻断列表文件`/etc/dnsmasq/blocklist.txt`,添加需要阻止的域名,然后重启`dnsmasq`服务。 ```bash sudo nano /etc/dnsmasq.conf ``` 添加以下内容: ``` domain-needed bogus-priv no-resolv dhcp-option=option:blocklists,"/etc/dnsmasq/blocklist.txt" ``` 6. 保存并重启服务:对`dnsmasq.conf`进行保存并重启服务,如`sudo service dnsmasq restart`。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peak wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值