【发布时间】:2019-06-17 13:59:12
【问题描述】:
我正在开发一个可以进行基于权限的搜索的 android 应用程序。我有一个代码可以获取并解析 apk 文件中的 AndroidManifest.xml 文件。
此代码解析 xml 文件并输出如下结果:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
我有一个名为 PInfo 的模型。这个模型有一个 ArrayList 命名权限。当您在 Android 上使用“PackageInfo”获得权限时,它会给出以下结果。
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
android.permission.WAKE_LOCK
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE
com.google.android.c2dm.permission.RECEIVE
android.permission.READ_EXTERNAL_STORAGE
AndroidManifest.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.omfaer.minion">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.omfaer.minion.activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.omfaer.minion.activities.HomeActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".activities.WallpapersActivity"/>
<provider
android:exported="false"
android:grantUriPermissions="true"
android:authorities="${applicationId}.provider"
android:name="android.support.v4.content.FileProvider">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_path"
/>
</provider>
</application>
</manifest>
PackageInfo 代码:
List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(context.getPackageManager().GET_PERMISSIONS);
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
PInfo deviceApps = new PInfo();
deviceApps.appName = p.applicationInfo.loadLabel(context.getPackageManager()).toString();
deviceApps.appPackage = p.packageName;
deviceApps.appIconId = p.applicationInfo.icon;
StringBuilder strBuilderPermissions = new StringBuilder();
try {
if (p.requestedPermissions != null) {
for (String perms : p.requestedPermissions) {
deviceApps.permissions.add(perms);
}
}
} catch (Exception e) {
//Log.v("PUCA for add permissions ", e.toString());
}
}
我也想在 Android 端获得这个结果。
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
这应该可以为数千个应用程序提供准确的结果。我该怎么办?
【问题讨论】:
-
顺便说一句,在您为 catch 语句编写的 Java 代码中,
Log.v不是这样工作的——您需要指定一个标签(通常是类的名称)作为第一个参数和第二个消息。 -
谢谢...我知道。这段代码只是一个引用。代码很脏。
标签: android android-manifest android-permissions