无论如何在 Android 中将 Drawable 转换为 int

Is there anyway to turn a Drawable to an int in Android

我正在制作一个显示 Android 设备安装权限详细信息的应用程序。目前,我正在显示一个带有图标的 AlertDialog 以表示许可,但我也想根据用户的请求发送通知。我的代码是:

Drawable icon;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    String permission = getArguments().getString("permission");
    String label = "";
    String description = "";
    icon = null;
    try {
        label = getActivity().getPackageManager().getPermissionInfo(permission, PackageManager.GET_META_DATA).loadLabel(getActivity().getPackageManager()).toString();
        description = getActivity().getPackageManager().getPermissionInfo(permission, PackageManager.GET_META_DATA).loadDescription(getActivity().getPackageManager()).toString();
        icon = getActivity().getPackageManager().getPermissionInfo(permission, PackageManager.GET_META_DATA).loadIcon(getActivity().getPackageManager());
    } catch (Exception ignored) {}
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
            .setTitle("Permission")
            .setMessage("Permission: " + getArguments().getString("permission") + Character.toString((char) 10) + "Label: " + label + Character.toString((char) 10) + "Description: " + description)
            .setPositiveButton("Dismiss", null)
            .setCancelable(false);
    if (icon != null) {
        builder.setIcon(icon);
    }
    final AlertDialog alertDialog = builder.create();
    alertDialog.setCanceledOnTouchOutside(false);
    alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            // Show notification here
        }
    });
    return alertDialog;
}

但是v4NotificationCompat.Builder不能只带一个int的Drawable,怎么办?

您可以这样获取图标资源 ID(假设 permission 是您在问题中也使用的字符串):

final PackageManager pm = context.getPackageManager();
PermissionInfo info = pm.getPermissionInfo(permission, PackageManager.GET_META_DATA);
int iconResourceId = info.icon;

然后...

NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
builder.setSmallIcon(iconResourceId);

R.drawable 是一个整数,R.color 或 R.string 或 R.layout

也是一个整数