android marshmallow (13.11.2015)
TRANSCRIPT
![Page 1: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/1.jpg)
Android Marshmallow
![Page 2: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/2.jpg)
Давайте познакомимся…
Mobile Dimension LLC
Старший Android Разработчик
Учебный центр «Jolly Droid»Основатель и преподаватель
Игорь Цеглевский
http://mobiledimension.ru
http://jollydroid.ru
![Page 3: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/3.jpg)
Marshmallow
![Page 4: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/4.jpg)
Permissions
![Page 5: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/5.jpg)
Permissions
• targetSdkVersion=22– Permissions (права доступа) работают как прежде:
разрешено всё, что описано в манифесте
– Пользователь может в настройках отозвать любое из прав! • Андроид предупреждает, что это может вызвать падение
приложения, но не запрещает
• При изменении списка прав приложение будет остановлено
– Если пользователь отозвал права, то соответствующие API вернут 0 или null
![Page 6: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/6.jpg)
Permissions
• targetSdkVersion=23
– «Нормальные» права доступа даются автоматически
– «Опасные» права необходимо запросить явно, для каждой группы
– «Опасные» права пользователь может отозвать в настройках приложения. Приложение должно всегда (каждый раз при обращении к соответствующим API) проверять наличие прав
![Page 7: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/7.jpg)
Permissions. Steps
ActivityCompat.shouldShowRequestPermissionRationale()
ContextCompat.checkSelfPermission()
Нет
ActivityCompat.requestPermissions()
Notification-Объяснение
Работаем
Да
Нет
Да
![Page 8: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/8.jpg)
Permissions. Steps
![Page 9: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/9.jpg)
Permissions. Steps
grantResults[0] ==PackageManager.PERMISSION_GRANTED
Учитываем в работе или информируем пользователя
onRequestPermissionsResult()
Работаем
Нет
Да
![Page 10: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/10.jpg)
Permissions. Interface
![Page 11: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/11.jpg)
Permissions. Ресурсы
https://gist.github.com/tseglevskiy/cc715f36e10ad81c83b6
http://developer.android.com/intl/ru/training/permissions/requesting.html
https://newcircle.com/s/post/1737/2015/05/31/the-new-android-m-permissions-model
http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
http://habrahabr.ru/post/269491/
![Page 12: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/12.jpg)
ID
![Page 13: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/13.jpg)
ID наши
• WiFi MAC, Bluetooth MAC: – всегда 02:00:00:00:00:00
• Phone number (telephonyManager.getLine1Number()): требуется:– READ_PHONE_STATE «Осуществление телефонных звонков и
управление ими»– или READ_SMS «Отправлять и просматривать SMS-
сообщения»
• IMEI (telephonyManager.getDeviceId()): – требуется READ_PHONE_STATE
• Попробуйте deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
![Page 14: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/14.jpg)
ID чужие
• Доступ к данным, содержащим ID окружающих устройств требует ACCESS_COARSE_LOCATION– WifiManager.getScanResults()
– BluetoothDevice.ACTION_FOUND
– BluetoothLeScanner.startScan()
• Note: When a device running Android initiates a background Wi-Fi or Bluetooth scan, the operation is visible to external devices as originating from a randomized MAC address.
![Page 15: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/15.jpg)
App Standby and Doze Mode
![Page 16: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/16.jpg)
Doze Mode & App Standby
• Doze Mode – режим, в который устройство переходит, если находится некоторое время с залоченным экраном, без движения и работающее от батарей
• App Standby – лишение ресурсов приложений, которые давно не использовались
![Page 17: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/17.jpg)
Doze Mode. Ограничения
• AlarmManager – только setAndAllowWhileIdle(), setExactAndAllowWhileIdle() и setAlarmClock(). Остальные задерживаются до maintenance window.
• JobScheduler – все текущие задачи завершаются, все отложенные ждут maintenance window
• SyncManager – все синки завершаются• PowerManager – работают только Wake Lock-и
приложений из белого списка, остальные игнорируются
• NetworkPolicyManager – для него doze mode тоже самое, что и idle mode. Т.е. сеть есть только для приложений из белого списка
![Page 18: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/18.jpg)
Doze Mode. Что работает
• AlarmManager– set[Exact]AndAllowWhileIdle() не чаще раз в 15
минут
– setAlarmClock()
• GCM messages with high priority
• Сеть и Wake Locks, если приложение в белом списке
• Все приложения получают возможность выполнить работу в течение Maintenance window
![Page 19: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/19.jpg)
Doze ModeMaintenance window наступит через:• 1 час• 2 часа• 4 часа• 6 часов (и далее каждые 6 часов)
![Page 20: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/20.jpg)
Doze Mode. Отладка
• Запустить приложение
• Залочить экран• adb shell dumpsys battery unplug
• adb shell dumpsys deviceidle step
![Page 21: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/21.jpg)
DeviceIdleController.java
![Page 22: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/22.jpg)
Doze Mode. Работа
![Page 23: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/23.jpg)
Doze Mode. Работа
![Page 24: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/24.jpg)
White list
• Приложению из white list доступна сеть и Wake lock-и
• Пользователь может включить сам:
– Настройки –> Батарея -> Экономия заряда батареи -> Все приложения -> App -> Не экономить
– Settings -> Battery -> Battery Optimization
• Можно запросить программно
![Page 25: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/25.jpg)
White list
![Page 26: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/26.jpg)
White list
![Page 27: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/27.jpg)
White list. Отладка
$ adb shell dumpsys deviceidle
Whitelist user apps:
ru.jollydroid.dozedemo1
$ adb shell dumpsys deviceidle \
whitelist +ru.jollydroid.dozedemo1
$ adb shell dumpsys deviceidle \
whitelist -ru.jollydroid.dozedemo1
![Page 28: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/28.jpg)
App Standby. Условия
Приложение может быть переведено в standby только если одновременно:
• Устройство работает от батареи
• Неверно следующее:– Пользователь явно запустил приложение.
– Приложение имеет foreground процесс
– Есть видимое уведомление (Notification), созданное приложением.
• Приложение не в белом списке
![Page 29: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/29.jpg)
App Standby. Отладка
$ adb shell dumpsys battery unplug
$ adb shell am set-inactive <packageName> true
$ adb shell am set-inactive <packageName> false
$ adb shell am get-inactive <packageName>
![Page 30: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/30.jpg)
Doze Mode. Ресурсы
https://gist.github.com/tseglevskiy/dc43de20efd261cfe895
https://developer.android.com/intl/ru/training/monitoring-device-state/doze-standby.html
https://developer.android.com/intl/ru/reference/android/os/PowerManager.html#ACTION_DEVICE_IDLE_MODE_CHANGED
https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/DeviceIdleController.java
https://newcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze
http://habrahabr.ru/post/269491/
![Page 31: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/31.jpg)
Notifications
![Page 32: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/32.jpg)
Notifications
• Notification.setLatestEventInfo() удален.
– Для обновления повторно используйте Notification.Builder и NotificationManager.notify() cтем же id.
• adb shell dumpsys notification --noredact
• У NotificationManager появился метод StatusBarNotification[] getActiveNotifications()
![Page 33: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/33.jpg)
Notifications. Ресурсы
• http://developer.android.com/intl/ru/reference/android/app/NotificationManager.html#getActiveNotifications()
![Page 34: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/34.jpg)
Text Selection
![Page 35: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/35.jpg)
Text Selection
![Page 36: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/36.jpg)
Text Selection
![Page 37: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/37.jpg)
Text Selection. Callback
![Page 38: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/38.jpg)
Text Selection. Callback
![Page 39: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/39.jpg)
Text Selection
![Page 40: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/40.jpg)
Text Selection. Грабли
Где наши пункты??
![Page 41: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/41.jpg)
Text Selection. Грабли
• Не всё помещается, появляется невидимый скролл• Порядок задается с помощью android:orderInCategory,
родные нумеруются 1..5• Менюшка fullscreen input mode не дополняется таким
способом (можно выключить с помощью android:imeOptions="flagNoExtractUi")
![Page 42: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/42.jpg)
Text Selection. Ресурсы
• https://gist.github.com/tseglevskiy/87227454f9b57ea69399
• http://developer.android.com/intl/ru/about/versions/marshmallow/android-6.0-changes.html#behavior-text-selection
![Page 43: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/43.jpg)
App Links
![Page 44: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/44.jpg)
App Links
![Page 45: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/45.jpg)
App Links
• https://<your host>/.well-known/assetlinks.json
– Обязательно HTTPS!!
![Page 46: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/46.jpg)
App Links. Отладка
• keytool -list -v -keystore debug.keystore \| grep SHA256
• adb shell am start -a android.intent.action.VIEW \-c android.intent.category.BROWSABLE \-d "http://<domain1>:<port>"
• adb shell dumpsys package domain-preferred-apps
![Page 47: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/47.jpg)
App Links. Ресурсы
https://gist.github.com/tseglevskiy/5f6d7d7e81a291000782
http://developer.android.com/intl/ru/training/app-links/index.html
http://blog.hokolinks.com/android-m-app-links-implementation-drawbacks/
![Page 48: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/48.jpg)
Auto Backup
![Page 49: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/49.jpg)
Auto Backup
• Auto backup происходит, когда:
– Устройство не используется
– Находится на зарядке
– Подключено к WiFi
– С момента последнего бэкапа прошло более 24 часов
![Page 50: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/50.jpg)
Auto Backup
• Не попадут файлы из каталогов– getCacheDir()
– getCodeCacheDir()
– getNoBackupFilesDir()
• С внешнего стораджа попадут только файлы из каталога getExternalFilesDir()
• Общий объем не более 25МБ на приложение– При превышении объема бэкап останавливается,
«в облаке» остается последнее сохраненное состояние
![Page 51: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/51.jpg)
Auto Backup. Config
![Page 52: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/52.jpg)
Auto Backup. Config
• domain – указание каталога, в котором искать файл– file – /data/data/<package>/files
– database – /data/data/<package>/databases/
– sharedpref – /data/data/<package>/shared_prefs/
– external –/storage/emulated/0/Android/data/<package>/files/
– root – ссылка на /data/data/<package>/ или аналог
(названия каталогов – условные, они могут меняться в зависимости от конфигурации)
![Page 53: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/53.jpg)
Auto Backup. Config
• path – относительное имя файла
– С расширением! Т.е. еслиgetSharedPreferences("pref1", MODE_PRIVATE), то <exclude domain="sharedpref"path="pref1.xml"/>
![Page 54: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/54.jpg)
Auto Backup. Event
![Page 55: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/55.jpg)
Auto Backup. Отладка
• Принудительный запуск бэкапаadb shell setprop log.tag.BackupXmlParserLogging VERBOSE
adb shell bmgr run
adb shell bmgr fullbackup <package>
• Восстановление из бэкапаadb shell bmgr restore <package>
• Очистка бэкапа в облакеadb shell bmgr wipe com.google.android.gms <package>
![Page 56: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/56.jpg)
Auto Backup. Грабли
PFTBT : Error -1002 backing up ru.jollydroid.autobackupdemo1PFTBT : Transport suggested backoff=0PFTBT : Transport rejected backup of ru.jollydroid.autobackupdemo1, skippingPFTBT : Full backup completed.
Если бэкап не работает и в логе такое сообщение, возможно:- Ошибка в конфиге, в результате не найдено ни одного файла для бэкапа- Слишком много данных (больше 25М)
![Page 57: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/57.jpg)
Auto Backup. Ресурсы
https://gist.github.com/tseglevskiy/e71cd081c2d8ef07c0a3
http://developer.android.com/intl/ru/training/backup/autosyncapi.html
https://developer.android.com/intl/ru/reference/android/app/backup/BackupAgent.html#onRestoreFinished()
![Page 58: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/58.jpg)
Вопросы?
![Page 59: Android Marshmallow (13.11.2015)](https://reader031.vdocuments.mx/reader031/viewer/2022012407/58ef9d9d1a28abbb588b461d/html5/thumbnails/59.jpg)
Спасибо за внимание!
http://jollydroid.ruhttp://mobiledimension.ru