如何为每个应用获取应用程序权限?在Android上如何以编程方式实现它?

12

如何以编程方式获取每个应用程序的权限详情?

我想在 TextView 上显示 "每个应用程序的权限详情",但我尝试了却不行。请问怎样才能实现呢?

Hello.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.content.Intent;
import android.content.Context;
import android.content.pm.*;
import android.widget.TextView;
import java.util.*;

public class HelloSakez extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final ListView lw = (ListView) findViewById(R.id.listView1);
final List<ResolveInfo> pkglist = lw.getContext().getPackageManager().queryIntentActivities(mainIntent, 0);
final TextView tw = (TextView) findViewById(R.id.textView1);
Iterator it = pkglist.iterator();
while(it.hasNext()){
ResolveInfo rf = (ResolveInfo)it.next();
tw.append(rf.toString());
}
}
}

主界面.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<ListView android:id="@+id/listView1" android:layout_height="wrap_content" android:layout_width="fill_parent"></ListView>
<TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>

请提供更多信息。很难理解您的问题。您是否想编写一个应用程序,它可以显示应用程序列表及其权限,并具有卸载能力? - Vladimir Ivanov
你想知道什么,如何获取权限、显示权限还是卸载应用程序? - Mudassir
@Vladimir Ivanov 是的!我想要Android的示例代码。 - zhocker
@Mudassir,您想知道什么,如何获取权限,显示权限还是卸载应用程序..?我想要每个问题的示例代码。 因为我在三天前就一直在寻找答案。 >///< 所以我决定问问题。抱歉我的提问不太好。 感谢您对我的问题感兴趣。 :) - zhocker
这个问题有点模糊。考虑针对一个具体的问题提出一个问题,而不是在一个帖子中提出三个大问题。 - Wroclai
4个回答

18

在您的活动中使用以下代码:

我创建了StringBuffer appNameAndPermissions = new StringBuffer();来追加所有应用程序和权限信息。

它运行良好,我已经测试过了。如果您有任何问题,请告诉我。

StringBuffer appNameAndPermissions = new StringBuffer();
PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo applicationInfo : packages) {
    Log.d("test", "App: " + applicationInfo.name + " Package: " + applicationInfo.packageName);
try {
    PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
    appNameAndPermissions.append(packageInfo.packageName+"*******:\n");

    //Get Permissions
    String[] requestedPermissions = packageInfo.requestedPermissions;
    if(requestedPermissions != null) {
        for (int i = 0; i < requestedPermissions.length; i++) {
            Log.d("test", requestedPermissions[i]);
            appNameAndPermissions.append(requestedPermissions[i]+"\n");
        }
    appNameAndPermissions.append("\n");
} catch (NameNotFoundException e) {
    e.printStackTrace();
}

在AndroidManifest.xml文件中使用以下权限:

<uses-permission android:name="android.permission.GET_TASKS"/>


2
为什么你需要这个权限?你在这里没有使用它。另外,由于你没有多个线程运行,所以不需要使用StringBuffer。关于权限,我认为你可以使用“loadLabel”,这样它们将与用户看到的名称相同。 - android developer
由于某些原因,当使用您提供的“getInstalledApplications”调用时,我得到了applicationInfo.name的null值。 - android developer

5

0

Zhocker

卸载任何应用程序,请使用以下代码

Intent i = new Intent(Intent.ACTION_DELETE);
i.setData(Uri.parse("package:com.package name"));
startActivity(i); 

要获取权限,请使用getInstalledPackages(int)和标志GET_PERMISSIONS


-3
  1. 要查看应用程序的权限,请转到清单文件并查看。

2.卸载应用程序,请按照以下步骤操作:

a. 转到设置 b. 然后打开应用程序 c. 然后打开管理应用程序 d. 然后选择您想要卸载的应用程序 e. 然后点击卸载并卸载该应用程序。


哦 >///<我该如何获取Android应用程序的“权限”并显示“权限”列表以及卸载每个应用程序。抱歉我的提问不好。请告诉我如何使用代码来获取Android应用程序的“权限”,并显示“权限”列表以及卸载每个应用程序。请给我提供示例代码。我想问一下。谢谢你回答我。 AndroidDanger你知道新问题的答案吗?请回答我。 - zhocker
3
伙计,并没有被踩,但他是在问如何以程序方式实现这个功能? - Mudassir
@Mudassir,我希望你能说一下。 我正在尝试寻找我的问题的答案。3天前,哈哈。 我找到了一个链接: link 但是我是Android编程的新手。 我学习了大约一周。 我有一个问题,所以这个点无法开发。 现在!!我正在尝试寻找我的问题的答案。 :) - zhocker
@Zhocker:你提到的链接是关于获取已安装应用程序列表的,而你询问的是权限问题。我不太明白你想要什么? - Mudassir
@ Mudassir 我想要一个示例代码,以显示已安装应用程序的列表。为什么我在问权限的问题? 答案:我想显示已安装应用程序的列表,显示每个应用程序的权限详细信息。我想要关于此的示例代码。 你明白我的意思吗? :) - zhocker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接