Android:如何使用<activity-alias>在代码中创建componentName

 多米音乐_34058991 发布于 2023-01-12 18:15

我有一个功能,我只希望仅在满足某些条件时才可用,因此我具有以下活动别名:


        
            
            
            
            
            
            
        
    

活动后,我将使用以下代码启用该组件

        String packageName = getPackageName();
        ComponentName componentWithTextFiles = new ComponentName(packageName, "share-files-text");
        ComponentName componentWithoutTextFiles = new ComponentName(packageName, "share-files");
        if(DebugAndTestSettings.ENABLE_TEXT_SLIDE){
            getPackageManager().setComponentEnabledSetting(componentWithTextFiles, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
            getPackageManager().setComponentEnabledSetting(componentWithoutTextFiles, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
        } else {
            getPackageManager().setComponentEnabledSetting(componentWithTextFiles, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
            getPackageManager().setComponentEnabledSetting(componentWithoutTextFiles, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
        }

问题是崩溃说软件包blabla不包含名为share-files-text的活动,如何使用别名来禁用/启用此元素?谢谢

编辑:我从这篇文章中得到了这个主意: Android:我可以以编程方式启用/禁用活动的意图过滤器吗?

2 个回答
  • @vallllll给出的解决方案工作正常,我尝试进行投票或发表评论,但由于仍需要声望点而无法执行操作。

    我在其他问题上尝试了许多其他解决方案,但没有用。这里给出的解决方案是唯一对我有用的解决方案

    我遇到的问题是,在将代码从sdk 18迁移到sdk 26之后,我遇到此错误组件类x在Y中不存在,当从Activity切换到Alias-Activity Old代码时调用setComponentEnabledSetting

          getPackageManager().setComponentEnabledSetting(
       new ComponentName(pkg name, alias name),
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED,    PackageManager.DONT_KILL_APP);
    

    新密码

    getPackageManager().setComponentEnabledSetting(
            new ComponentName(this, pkg name + alias name,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    

    进行了两项更改,1更改了ComponentName构造函数以使用接受上下文和类名的版本,而不是使用pkg name的构造函数版本,类名2使用完全限定的别名+要获取完全限定的别名,我使用了以下代码

    String packageName = getPackageName();
        try {
            PackageInfo p =         getApplicationContext().getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
            for (ActivityInfo activityInfo : p.activities) {
                Log.d(LOG_TAG, "ACT " + activityInfo.name+" "+activityInfo.packageName );
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    

    2023-01-12 18:18 回答
  • 我已经找到使用此代码的解决方案

    String packageName = getPackageName();
    try {
        PackageInfo p = getApplicationContext().getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        for (ActivityInfo activityInfo : p.activities) {
            if(log.d()) log.d("ACT " + activityInfo.name+" "+activityInfo.packageName);
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    

    如果您的别名是“别名”

    ComponentName componentWithoutTextFiles = new ComponentName(packageName, packageName".alias");
    

    2023-01-12 18:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有