Java 如何授予应用程序清单权限?如何在Android上以编程方式完成?
我用过这个 我尝试了此代码,但不起作用: PACKAGE_NAME=context.getApplicationContext().getPackageName() 但这帮不了我。我有申请表,我想获得他们每个人的许可。 我怎么办 更新: 就像这张照片一样,当点击“دستسیها”时,我想获得在该应用程序中使用的权限。(例如,在电报中:互联网、存储、呼叫、相机……) 更新2:Java 如何授予应用程序清单权限?如何在Android上以编程方式完成?,java,android,permissions,Java,Android,Permissions,我用过这个 我尝试了此代码,但不起作用: PACKAGE_NAME=context.getApplicationContext().getPackageName() 但这帮不了我。我有申请表,我想获得他们每个人的许可。 我怎么办 更新: 就像这张照片一样,当点击“دستسیها”时,我想获得在该应用程序中使用的权限。(例如,在电报中:互联网、存储、呼叫、相机……) 更新2: class AppViewHolder extends RecyclerView.ViewHolder implemen
class AppViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
AppViewHolder(View itemView, Context context, List<App> apps) {
super(itemView);
txt_show_permission = itemView.findViewById(R.id.txt_show_permission);
/*The String Buffer For Permissions*/
appNameAndPermissions = new StringBuffer();
PackageManager pm = context.getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo applicationInfo : packages) {
Log.d(TAG, "App: " + applicationInfo.name + " Package: " + applicationInfo.packageName);
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
appNameAndPermissions.append(packageInfo.packageName + "*******:\n");
//Get Permissions
requestedPermissions = packageInfo.requestedPermissions;
if (requestedPermissions != null) {
for (int i = 0; i < requestedPermissions.length; i++) {
Log.d(TAG, requestedPermissions[i]);
appNameAndPermissions.append(requestedPermissions[i] + "\n");
}
appNameAndPermissions.append("\n");
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
我将为我的问题共享适配器代码
我的适配器:
class AppViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
AppViewHolder(View itemView, Context context, List<App> apps) {
super(itemView);
txt_show_permission = itemView.findViewById(R.id.txt_show_permission);
/*The String Buffer For Permissions*/
appNameAndPermissions = new StringBuffer();
PackageManager pm = context.getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo applicationInfo : packages) {
Log.d(TAG, "App: " + applicationInfo.name + " Package: " + applicationInfo.packageName);
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
appNameAndPermissions.append(packageInfo.packageName + "*******:\n");
//Get Permissions
requestedPermissions = packageInfo.requestedPermissions;
if (requestedPermissions != null) {
for (int i = 0; i < requestedPermissions.length; i++) {
Log.d(TAG, requestedPermissions[i]);
appNameAndPermissions.append(requestedPermissions[i] + "\n");
}
appNameAndPermissions.append("\n");
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
适配器类中对话框的方法:
public void showDialog(String txtPermission) {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.show_permission_dialog);
TextView txt_permission = dialog.findViewById(R.id.txt_permission);
Button btn_ok = dialog.findViewById(R.id.btn_ok);
txt_permission.setText(txtPermission);
btn_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
OnItemClickListener
,请参见以下链接。您可以获取单击的行的位置,并通过该行获取应用程序名称,您可以将其传递给另一个函数。然后在该函数中编写代码,以获取传递的应用程序名称的权限并显示它
编辑2:
您需要从字符串缓冲区提取某个应用程序的权限,而不是将appnameandpowpermissions
传递给包含整个列表的showDialog
。以下是方法:
String app_name = itemView.findViewById(R.id.app_name_text_view).getText().toString();
int indexOfApp = appNameAndPermissions.indexOf(app_name);
int indexOfLastPermission = appNameAndPermissions.indexOf("\n", indexOfApp);
String permissions = appNameAndPermissions.substring(indexOfApp, indexOfLastPermission);
从你的问题中不太清楚问题是什么。获取应用程序在其清单中列出的所有权限的列表。那么,问题是您无法获得所有已安装应用程序的列表吗?(“我可以得到应用程序包名”似乎与此相矛盾)。同时,请以合理的方式写下你的问题;不要随意将单词大写(阅读文本时会分心)。好的,我编辑它…我想获得我点击的每个应用的权限你想获得你点击的每个应用的权限,对吗?那么,您在链接中面临的解决方案问题是什么?也请张贴任何代码,你有written@KunjMehta不,我想在单击每个应用程序时,我将获得此应用程序中使用的权限。我在该链接上编写了代码,但对我无效。请查看更新问题。我添加了照片谢谢,我使用了这个链接,但没有为我工作。你能给我解释一下吗?该权限
已被否决!您得到的错误是什么?我对它进行了测试,StringBuffer部分对我来说运行良好,即使没有GET_TASKS许可。您需要帮助转换为字符串吗?您是如何实现上述布局的?您是否使用过ListView或任何其他视图,或者一直在逐个添加按钮和图像?我将根据您的编辑分享代码。在Github或net上搜索RecyclerView的itemClickListeners,您将获得许多实现。使用任何。首先,我假设txt_show_权限是您的按钮,您不需要使用StringBuffer。其次,必须确保在onBindViewHolder中设置OnClickListener,而不是在创建适配器实例的位置。第三,您必须循环访问requestedPermissions数组。第四,我希望您能分享全部相关代码,这样我就可以了解上下文、流和变量名
String app_name = itemView.findViewById(R.id.app_name_text_view).getText().toString();
int indexOfApp = appNameAndPermissions.indexOf(app_name);
int indexOfLastPermission = appNameAndPermissions.indexOf("\n", indexOfApp);
String permissions = appNameAndPermissions.substring(indexOfApp, indexOfLastPermission);