当前位置: 首页 > 知识库问答 >
问题:

创建带有数组列表的JSON文件时出现问题

万俟皓
2023-03-14

我正在创建一个函数,它检索设备的已安装应用程序,应用程序的包和每个应用程序拥有的权限。问题是,我想把所有这些放进一个JSON文件,我不知道怎么做,这里是我编程的,但它不工作,请,如果有人知道一些东西,帮助,这是非常重要的,对我!提前道谢。

public static void installedApps(Context context) throws IOException{

    PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packagelist = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    CharSequence app;
    String pckge;
    String[] permissions;

    for (ApplicationInfo applicationInfo : packagelist){

        app = applicationInfo.loadLabel(context.getPackageManager());
        pckge = applicationInfo.packageName;

        JSONObject json = new JSONObject();

        Log.d("test", "App: "+ applicationInfo.loadLabel(context.getPackageManager()) +", Package: " + applicationInfo.packageName);

        try{
            PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);

            //Get Permissions
            String[] requestedPermissions = packageInfo.requestedPermissions;

            if(requestedPermissions != null){
                for (int i = 0; i < requestedPermissions.length; i++){

                    Log.d("test", requestedPermissions[i]);

                    permissions = requestedPermissions;

                    JSONArray jsonArray = new JSONArray();

                    try{
                        json.put("app", app);
                        json.put("package", pckge);

                        jsonArray.put(Integer.parseInt("permission"), permissions);


                    }catch (JSONException e) {
                        e.printStackTrace();
                    }


                }
            }
            //primero cargar en un array todos los datos, y pasarlos a un json llamandolos
        }catch (PackageManager.NameNotFoundException e){
            e.printStackTrace();
        }

    }
}

共有1个答案

袁永贞
2023-03-14

我可能会选这样的东西:

public static void installedApps(Context context) {
    PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packagelist = pm.getInstalledApplications(PackageManager.GET_META_DATA);
    JSONObject resp = new JSONObject();

    for (ApplicationInfo applicationInfo : packagelist) {

        CharSequence app = applicationInfo.loadLabel(context.getPackageManager());
        String pckge = applicationInfo.packageName;
        JSONObject json = new JSONObject();

        try {
            //Get Permissions
            PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
            String[] requestedPermissions = packageInfo.requestedPermissions;
            if (requestedPermissions != null) {
                json.put("app", app);
                json.put("package", pckge);
                JSONArray jsonArray = new JSONArray();
                for (String requestedPermission : requestedPermissions) {
                    jsonArray.put(requestedPermission);
                }
                json.put("permission", jsonArray);
                resp.put(applicationInfo.name, json); // something to identify each app
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // return resp.toString() or store in file or whatever you want to do
}
 类似资料:
  • 我正在尝试创建一个可执行的。jar文件。我一直在互联网上试图找出如何从命令提示符来做到这一点。

  • 我正在尝试在Hive中创建一个表。需要帮助。 示例代码:创建外部表table1(id字符串、名称字符串、“12489738”字符串、“12492628”字符串、“12492633”字符串、“12492638”字符串、“12492655”字符串、“12492659”字符串)行格式分隔字段,由“\t”LOCATION“”tblproperties(“skip.header.line.count”=“1

  • 问题内容: 我有一个很大的文件(大约有200k输入)。输入形式为: 我正在读取此文件并将其存储在列表中,如下所示: 每当看到新行时,都会拆分文件。因此,文本如下所示: 我现在必须将这些值存储在字典中,其中键值是每个列表的第一个元素。即键将是A,B,C,D。我发现很难输入值作为列表的其余元素。即字典应该看起来像: 我已经完成以下工作: 请帮助我如何将值添加到字典中。如果列表中没有任何元素(除了将作为

  • 问题内容: 是否存在列注释语法,该语法允许我直接在创建表语句(即,内联)中声明列的位置指定列注释?该11克规范没有提到任何东西,在另一页中提到的东西,但我无法得到它的工作。创建表后有一种指定注释的方法,但是我认为将注释与字段定义分开很烦人。我正在寻找这样的东西(不起作用): 问题答案: 恐怕“烦人”的语法是这样做的唯一方法。SQL Server,PostgreSQL和DB2使用相同的语法(尽管据我

  • 我正在创建包含表格和图像的pdf。问题是我可以在第一页看到图像,但在第二页看不到。 > 使用

  • 问题内容: 假设我要制作文件: 由于不存在,因此给出。 自动生成这些目录的最Python方式是什么?对我来说,是否有必要显式地调用并且在每个单独的位置上调用(即/ foo,然后是/ foo / bar)? 问题答案: 该功能执行此操作。请尝试以下操作: 添加该块的原因是为了处理在和调用之间创建目录时的情况,以便保护我们免受竞争条件的影响。 在Python 3.2+中,有一种更优雅的方法可以避免上述