Librería de Lvl y melcocha de android
La librería Lvl no compila más en Android Marshmallow debido a la falta de apache. Puede agregar useLibrary 'org.apache.http.legacy
pero es sólo una solución temporal. El problema es este método:
private Map<String, String> decodeExtras(String extras) { Map<String, String> results = new HashMap<String, String>(); try { URI rawExtras = new URI("?" + extras); List<NameValuePair> extraList = URLEncodedUtils.parse(rawExtras, "UTF-8"); for (NameValuePair item : extraList) { results.put(item.getName(), item.getValue()); } } catch (URISyntaxException ignored) { } return results; }
NameValuePair
y URLEncodedUtils
no se encuentran.
- Apache conexión HTTP con Android 6.0 (Marshmallow)
- Error en la versión 6.0 de Android 6.0: EACCES (Permiso denegado)
- Android Marshmallow ART "No se pudo encontrar el offset nativo para dex" crash
- Android M: VoIP, JAINSIP, SipStack; Inconsistent SipProvider Excepción al crear un punto de escucha con tls habilitado
- getAllNetworkInfo () está obsoleto en M, pero su sustitución tiene un comportamiento diferente
¿Cuál es el nuevo "way"
? ¿Cómo puedo reemplazar esta llamada por un nuevo código compatible con la nueva versión de Android?
- Acceso a la red en modo doze
- ¿Cuánto tiempo tarda para que android pase al modo doze?
- Cómo cambiar programaticamente la configuración WiFi en Android 6 (M)?
- Cómo cambiar el color de los iconos de notificación de la barra de estado / tinte en android (melcocha y más de 23+)?
- WindowBackground en Android 6 (Marshmallow)
- Aplicación personalizada no creada en Android M (vista previa final)
- Abrir archivo pdf Error: No se pudo acceder a este archivo Compruebe la ubicación o la red e inténtelo de nuevo. Melcocha de Android 6
- El permiso de manifiesto no funciona en Android 6
Escribí mi propia clase mirando el código original como solución temporal:
public class URLUtils { private static final String PARAMETER_SEPARATOR = "&"; private static final String NAME_VALUE_SEPARATOR = "="; private static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; public static List<Item> parse(final URI uri, final String encoding) { List<Item> result = Collections.emptyList(); final String query = uri.getRawQuery(); if (query != null && query.length() > 0) { result = new ArrayList<>(); parse(result, new Scanner(query), encoding); } return result; } public static void parse(final List<Item> parameters, final Scanner scanner, final String encoding) { scanner.useDelimiter(PARAMETER_SEPARATOR); while (scanner.hasNext()) { final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR); if (nameValue.length == 0 || nameValue.length > 2) throw new IllegalArgumentException("bad parameter"); final String name = decode(nameValue[0], encoding); String value = null; if (nameValue.length == 2) value = decode(nameValue[1], encoding); parameters.add(new Item(name, value)); } } private static String decode (final String content, final String encoding) { try { return URLDecoder.decode(content, encoding != null ? encoding : DEFAULT_CONTENT_CHARSET); } catch (UnsupportedEncodingException problem) { throw new IllegalArgumentException(problem); } } } public class Item { private String name; private String value; public Item(String n, String v) { name = n; value = v; } public String getName() { return name; } public String getValue() { return value; } }
Mi solución rápida y sucia era reemplazar el código heredado con
Uri uri = Uri.parse("?" + extras); for (String itemName : uri.getQueryParameterNames()) results.put(itemName, uri.getQueryParameter(itemName));
Métodos llamados decodeExtras () aparecen en dos lugares en el LVL, y su código difiere. No hay necesidad de llegar con código personalizado detallado – android.net.Uri ofrece funcionalidad similar, y los reemplazos a continuación trabajan para el nivel 11 de la API (Honeycomb) y superiores.
Para APKExpansionPolicy:
private Map<String, String> decodeExtras(String extras) { Map<String, String> results = new HashMap<>(); Uri uri = new Uri.Builder().encodedQuery(extras).build(); Set<String> parameterNames = uri.getQueryParameterNames(); for (String parameterName : parameterNames) { List<String> values = uri.getQueryParameters(parameterName); int count = values.size(); if (count >= 1) { results.put(parameterName, values.get(0)); for (int i = 1; i < count; ++i) { results.put(parameterName + i, values.get(i)); } } } return results; }
Para ServerManagedPolicy:
private Map<String, String> decodeExtras(String extras) { Map<String, String> results = new HashMap<>(); Uri uri = new Uri.Builder().encodedQuery(extras).build(); Set<String> parameterNames = uri.getQueryParameterNames(); for (String parameterName : parameterNames) { results.put(parameterName, uri.getQueryParameter(parameterName)); } return results; }
He encontrado la versión actualizada en https://github.com/google/play-licensing , el problema se soluciona con URIQueryDecoder
- ¿Hay alguna manera de detectar si el reloj es redondo?
- ¿Puedes crear React Native apps (aplicación para Android) en Ubuntu?