如何确定在android中以编程方式运行应用程序的权限?
我想查看在我的软件中运行android应用程序的权限 因此,我有以下代码:如何确定在android中以编程方式运行应用程序的权限?,android,activity-manager,Android,Activity Manager,我想查看在我的软件中运行android应用程序的权限 因此,我有以下代码: List<App> apps = new ArrayList<App>(); ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); PackageManager packageManager = getPackageManager(); List<Running
List<App> apps = new ArrayList<App>();
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
PackageManager packageManager = getPackageManager();
List<RunningAppProcessInfo> l = am.getRunningAppProcesses();
Iterator<RunningAppProcessInfo> i = l.iterator();
PackageManager pm = this.getPackageManager();
int row_count = 0 ;
while(i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
try
{
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
App app = new App();
app.setTitle(c.toString());
app.setPackageName(l.get(row_count).processName);
PackageInfo packageInfo = packageManager.getPackageInfo(l.get(row_count).processName, PackageManager.GET_PERMISSIONS);
String[] reqPermission= packageInfo.requestedPermissions;
app.set_Permission_Info(reqPermission);
// app.setVersionName(p.versionName);
// app.setVersionCode(p.versionCode);
// CharSequence description = p.applicationInfo.loadDescription(packageManager);
// app.setDescription(description != null ? description.toString() : "");
row_count++;
// app.setSize(p.s)
apps.add(app);
}
catch(Exception e){}
List apps=new ArrayList();
ActivityManager am=(ActivityManager)this.getSystemService(ACTIVITY_服务);
PackageManager PackageManager=getPackageManager();
List l=am.getRunningAppProcesses();
迭代器i=l.迭代器();
PackageManager pm=this.getPackageManager();
int row_count=0;
while(i.hasNext()){
ActivityManager.RunningAppProcessInfo=(ActivityManager.RunningAppProcessInfo)(i.next());
尝试
{
CharSequence c=pm.getApplicationLabel(pm.getApplicationInfo(info.processName,PackageManager.GET_META_DATA));
App App=新App();
app.setTitle(c.toString());
app.setPackageName(l.get(行计数).processName);
PackageInfo PackageInfo=packageManager.getPackageInfo(l.get(行计数).processName,packageManager.get_权限);
字符串[]reqPermission=packageInfo.requestedPermissions;
应用程序设置权限信息(reqPermission);
//app.setVersionName(p.versionName);
//应用程序setVersionCode(p.versionCode);
//CharSequence description=p.applicationInfo.loadDescription(packageManager);
//app.setDescription(description!=null?description.toString():“”);
行计数++;
//应用程序设置大小(p.s)
apps.add(app);
}
捕获(例外e){}
但有一个问题
当我运行应用程序时,我发现应用程序名和应用程序包名不一致。为什么会出现此问题
主要问题描述如下:
假设我的设备中运行了一个名为“电子书阅读器”和“摄像头”的应用程序。程序包名称分别为“com.a.b”和“com.c.d”。此代码的问题是,相应的程序包名称与相应的应用程序名称不符
它将“com.a.b”的包名显示为“照相机”,将“com.c.d”的包名显示为“电子书阅读器”,这是不需要的
你知道如何解决这个问题吗?
谢谢进程名称不绑定到应用程序包名称。为了方便起见,它们在默认情况下是相同的。但是,每个应用程序都可以使用该属性在其清单中自由更改其进程名称,或者为各种组件生成具有不同名称的更多进程 在更高级的场景中,多个应用程序可以共享同一个流程 特别是,这意味着您不能使用进程名来获取当前正在运行的应用程序。您应该改为使用字段来迭代在该进程中加载的包列表。请记住,它是一个数组,可以包含多个应用程序包名。(请参见上面关于高级场景的说明) 另请注意,作为各州的文件: 注意:此方法仅用于调试或构建面向用户的流程管理UI
进程名称不绑定到应用程序包名称。为了方便起见,默认情况下它们恰好相同。但是,每个应用程序都可以使用该属性在其清单中自由更改其进程名称,或者为不同组件生成更多具有不同名称的进程 在更高级的场景中,多个应用程序可以共享同一个流程 特别是,这意味着您不能使用进程名来获取当前正在运行的应用程序。您应该改为使用字段来迭代在该进程中加载的包列表。请记住,它是一个数组,可以包含多个应用程序包名。(请参见上面关于高级场景的说明) 另请注意,作为各州的文件: 注意:此方法仅用于调试或构建面向用户的流程管理UI
应用程序名称和应用程序的程序包名称通常不同。您最好使用程序包名称,因为这在整个设备中是唯一的 更新: 现在我理解了你的问题。感谢你的澄清。这是因为变量
行数
。基本上你使用的是两个不同的迭代器变量。这就是为什么你得到两个不同的结果。你不需要行数
,因为你已经有了I
的interator。
请尝试以下更新的代码:
基本上l.get(行数)。processName
被info.processName
替换
List<App> apps = new ArrayList<App>();
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
PackageManager packageManager = getPackageManager();
List<RunningAppProcessInfo> l = am.getRunningAppProcesses();
Iterator<RunningAppProcessInfo> i = l.iterator();
PackageManager pm = this.getPackageManager();
// int row_count = 0 ; // no need for this. feel free to delete
while(i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
try
{
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
App app = new App();
app.setTitle(c.toString());
app.setPackageName(info.processName);
PackageInfo packageInfo = packageManager.getPackageInfo(info.processName, PackageManager.GET_PERMISSIONS);
String[] reqPermission= packageInfo.requestedPermissions;
app.set_Permission_Info(reqPermission);
// app.setVersionName(p.versionName);
// app.setVersionCode(p.versionCode);
// CharSequence description = p.applicationInfo.loadDescription(packageManager);
// app.setDescription(description != null ? description.toString() : "");
//row_count++; // no need for this. feel free to delete
// app.setSize(p.s)
apps.add(app);
}
catch(Exception e){}
List apps=new ArrayList();
ActivityManager am=(ActivityManager)this.getSystemService(ACTIVITY_服务);
PackageManager PackageManager=getPackageManager();
List l=am.getRunningAppProcesses();
迭代器i=l.迭代器();
PackageManager pm=this.getPackageManager();
//int row_count=0;//不需要这个。请随意删除
while(i.hasNext()){
ActivityManager.RunningAppProcessInfo=(ActivityManager.RunningAppProcessInfo)(i.next());
尝试
{
CharSequence c=pm.getApplicationLabel(pm.getApplicationInfo(info.processName,PackageManager.GET_META_DATA));
App App=新App();
app.setTitle(c.toString());
app.setPackageName(info.processName);
PackageInfo PackageInfo=packageManager.getPackageInfo(info.processName,packageManager.GET_PERMISSIONS);
字符串[]reqPermission=packageInfo.requestedPermissions;
应用程序设置权限信息(reqPermission);
//app.setVersionName(p.versionName);
//应用程序setVersionCode(p.versionCode);
//CharSequence description=p.applicationInfo.loadDescription(packageManager);
//app.setDescription(description!=null?description.toString():“”);
//row_count++;//不需要这个。可以随意删除
//应用程序设置大小(p.s)
apps.add(app);
}
捕获(例外e){}
应用程序名称和应用程序包名称不正确
PackageManager mPm = getPackageManager();
List <PackageInfo> appList=mPm.getInstalledPackages(PackageManager.GET_PERMISSIONS|PackageManager.GET_RECEIVERS|
PackageManager.GET_SERVICES|PackageManager.GET_PROVIDERS);
for (PackageInfo pi : appList) {
System.out.println("Process Name: "+pi);
// Do not add System Packages
if ((pi.requestedPermissions == null || pi.packageName.equals("android")) ||
(pi.applicationInfo != null && (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0))
continue;
for (String permission : pi.requestedPermissions) {
//Map<String, String> curChildMap = new HashMap<String, String>();
//System.out.println("############ "+permission);
try {
PermissionInfo pinfo = mPm.getPermissionInfo(permission, PackageManager.GET_META_DATA);
CharSequence label = pinfo.loadLabel(mPm);
CharSequence desc = pinfo.loadDescription(mPm);
System.out.println("$$$$$ "+label+"!!!!!! "+desc);
} catch (NameNotFoundException e) {
Log.i(TAG, "Ignoring unknown permission " + permission);
continue;
}
}
}