Чтобы их включить, нужно набрать:
1 |
*#*#2846579#*#* |
Далее Background Setting
– Log setting
, и там включить все логи.
Жизнь замечательных грибов
В этой рубрике собраны статьи с тегом «Андроид». Разработка под Android, советы, решение проблем.
Неожиданно обнаружилось что в странице загружаемой в виджет webview не работаю инпуты файлов. Т.е. при нажатии кнопки браузер не реагирует от слова никак. Как оказалось при дальнейших раскопках, Google подразумевает, что обработку файлов «вы берете на себя».
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
public class MainActivity extends AppCompatActivity { private WebView mbrowser; private ValueCallback<Uri> mUploadMessage; public ValueCallback<Uri[]> uploadMessage; public static final int REQUEST_SELECT_FILE = 100; private final static int FILECHOOSER_RESULTCODE = 1; ... ... @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (requestCode == REQUEST_SELECT_FILE) { if (uploadMessage == null) return; uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent)); uploadMessage = null; } } else if (requestCode == FILECHOOSER_RESULTCODE) { if (null == mUploadMessage) return; Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; } } @Override protected void onCreate(Bundle savedInstanceState) { ... ... mbrowser=(WebView) findViewById(R.id.main_webview); mbrowser.getSettings().setJavaScriptEnabled(true); // разрешен javascript mbrowser.getSettings().setAppCacheEnabled(false); // разрешон кэш mbrowser.getSettings().setDatabaseEnabled(true); // хранение данных во встроенной БД в браузере mbrowser.getSettings().setDomStorageEnabled(true); // mbrowser.getSettings().setSupportZoom(true); // зум mbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // разрешать открывать окна //mbrowser.getSettings().setBuiltInZoomControls(true); // приблизить/удалить mbrowser.getSettings().setGeolocationEnabled(true); // разрешаем геолокацию mbrowser.setWebChromeClient(new WebChromeClient() { @Override public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); } // For 3.0+ Devices (Start) // onActivityResult attached before constructor protected void openFileChooser(ValueCallback uploadMsg, String acceptType) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } // For Lollipop 5.0+ Devices public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { if (uploadMessage != null) { uploadMessage.onReceiveValue(null); uploadMessage = null; } uploadMessage = filePathCallback; Intent intent = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { intent = fileChooserParams.createIntent(); } try { startActivityForResult(intent, REQUEST_SELECT_FILE); } catch (ActivityNotFoundException e) { uploadMessage = null; return false; } return true; } //For Android 4.1 only protected void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE); } protected void openFileChooser(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); } }); |
Начиная с API 19, SetInterval в приложениях срабатывает не так как раньше — в строго заданное время, а в тот момент, когда считает необходимым ядро системы. Иногда разрыв между «задуманным» и фактом выполнения аларма достигает нескольких минут.
Вариант обхода: разовый аларм срабатывает корректно. Следовательно после его срабатывания, необходимо создать его снова.
1 2 3 4 5 6 7 8 9 10 11 |
private void restartNotify() { am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, TimeNotification.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT ); // На случай, если мы ранее запускали активити, а потом поменяли время, // откажемся от уведомления am.cancel(pendingIntent); // Устанавливаем разовое напоминание am.set(AlarmManager.RTC_WAKEUP, stamp.getTime(), pendingIntent); }<code></code> |
Актуально для телефонов Huawei На некоторых устройствах логи по-умолчанию отключены.
Чтобы их включить, нужно набрать:
1 |
*#*#2846579#*#* |
Далее Background Setting
– Log setting
, и там включить все логи.
Прочитать cookies на открытой странице в webview можно например так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public String CookieExtract (String cooks,String coocksname){ String CookieValue = null; if (cooks!=null) { Log.v("Form1", "Все куки:"+cooks); Log.v("Form1", "Ищем:"+coocksname); String[] temp = cooks.split(";"); for (String ar1 : temp) { if (ar1.contains(coocksname)) { String[] temp1 = ar1.split("="); CookieValue = temp1[1]; break; } } } else { Log.v("Form1", "Куков пока нет..."); }; return CookieValue; }; @Override public void onPageFinished(WebView view, String url){ user_randomid_w3=CookieExtract(CookieManager.getInstance().getCookie(url),"user_randomid_w3"); Log.v("Form1", "Прочитали куки:"+user_randomid_w3); mbrowser.setVisibility(View.VISIBLE); spiner.setVisibility(View.INVISIBLE); super.onPageFinished(view, url); } |