下面列出了怎么用android.net.UrlQuerySanitizer的API类实例代码及写法,或者点击链接到github查看源代码。
static Bundle getAllKeyValuePairs(String url, boolean encodeValues) {
if (url == null) return new Bundle();
Bundle customPairs = new Bundle();
try {
UrlQuerySanitizer sanitizer = new UrlQuerySanitizer();
sanitizer.setAllowUnregisteredParamaters(true);
sanitizer.setUnregisteredParameterValueSanitizer(UrlQuerySanitizer.getAllButNulLegal());
sanitizer.parseUrl(url);
Set<String> queryParams = sanitizer.getParameterSet();
for (String key : queryParams) {
String value = getValueForKey(key, sanitizer, false);
if (value != null) {
// Don't encode wzrk_c2a - as the URL must be preserved
if (encodeValues || key.equals("wzrk_c2a")) {
// Already encoded
customPairs.putString(key, value);
} else {
customPairs.putString(key, URLDecoder.decode(value, "UTF-8"));
}
}
}
} catch (Throwable ignore) {
// Won't happen
}
return customPairs;
}
public static XulDrawable buildAnimation(InputStream stream, String url, String imageKey) {
if (stream == null) {
return null;
}
UrlQuerySanitizer s = new UrlQuerySanitizer(url);
boolean noLoop = s.hasParameter("NoLoop");
boolean noTransparent = s.hasParameter("noTransparent");
float speed = XulUtils.tryParseFloat(s.getValue("Speed"), 1.0f);
if (speed <= 0) {
speed = 0.01f;
}
XulGIFDecoder.GIFFrame[] frames = XulGIFDecoder.decode(stream, noLoop, noTransparent);
if (frames == null) {
Log.e(TAG, "GIF decode failed! " + stream + " URL:" + url);
return null;
}
if (frames.length == 1) {
XulGIFDecoder.GIFStaticRender staticRenderer = XulGIFDecoder.createStaticRenderer(frames, noTransparent);
return staticRenderer.extractDrawable(url, imageKey);
} else {
XulGIFAnimationDrawable drawable = new XulGIFAnimationDrawable();
drawable._gifRender = XulGIFDecoder.createAnimationRenderer(frames, noLoop, noTransparent);
drawable._url = url;
drawable._key = imageKey;
drawable._speed = speed;
return drawable;
}
}
@SuppressLint("SetJavaScriptEnabled")
private void initWebView() {
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith(ApiConfig.REDIRECT_URI)) {
List<UrlQuerySanitizer.ParameterValuePair> pvpList = new UrlQuerySanitizer(url)
.getParameterList();
for (UrlQuerySanitizer.ParameterValuePair pvp : pvpList) {
if ("code".equals(pvp.mParameter)) {
Intent data = new Intent();
data.putExtra(CODE, pvp.mValue);
setResult(RESULT_OK, data);
finish();
break;
}
}
} else {
webView.loadUrl(url);
}
return true;
}
});
webView.loadUrl(url);
}
static JSONObject getUrchinFromUri(Uri uri) {
JSONObject referrer = new JSONObject();
try {
UrlQuerySanitizer sanitizer = new UrlQuerySanitizer();
sanitizer.setAllowUnregisteredParamaters(true);
sanitizer.parseUrl(uri.toString());
// Don't care for null values - they won't be added anyway
String source = getUtmOrWzrkValue("source", sanitizer);
String medium = getUtmOrWzrkValue("medium", sanitizer);
String campaign = getUtmOrWzrkValue("campaign", sanitizer);
referrer.put("us", source);
referrer.put("um", medium);
referrer.put("uc", campaign);
String wm = getWzrkValueForKey("medium", sanitizer);
if (wm != null && wm.matches("^email$|^social$|^search$"))
referrer.put("wm", wm);
Logger.d("Referrer data: " + referrer.toString(4));
} catch (Throwable ignore) {
// Won't happen
}
return referrer;
}
private static String getUtmOrWzrkValue(String utmKey, UrlQuerySanitizer sanitizer) {
// Give preference to utm_*, else, try to look for wzrk_*
String value;
if ((value = getUtmValueForKey(utmKey, sanitizer)) != null
|| (value = getWzrkValueForKey(utmKey, sanitizer)) != null)
return value;
else
return null;
}
private static String getValueForKey(String key, UrlQuerySanitizer sanitizer, boolean truncate) {
if (key == null || sanitizer == null) return null;
try {
String value = sanitizer.getValue(key);
if (value == null) return null;
if (truncate && value.length() > Constants.MAX_KEY_LENGTH)
return value.substring(0, Constants.MAX_KEY_LENGTH);
else
return value;
} catch (Throwable t) {
Logger.v("Couldn't parse the URI", t);
return null;
}
}
@Before
public void setUp() {
mSanitizer = new UrlQuerySanitizer();
mSanitizer.setAllowUnregisteredParamaters(true);
mSanitizer.setUnregisteredParameterValueSanitizer(UrlQuerySanitizer.getUrlAndSpaceLegal());
}
@Nullable
public static String extractAuthCodeFromUrl(@NonNull String url) {
return new UrlQuerySanitizer(url).getValue("code");
}
private static String getWzrkValueForKey(String key, UrlQuerySanitizer sanitizer) {
key = "wzrk_" + key;
return getValueForKey(key, sanitizer, true);
}
private static String getUtmValueForKey(String key, UrlQuerySanitizer sanitizer) {
key = "utm_" + key;
return getValueForKey(key, sanitizer, true);
}