Android Marshmallow (13.11.2015)

59
Android Marshmallow

Transcript of Android Marshmallow (13.11.2015)

Page 1: Android Marshmallow (13.11.2015)

Android Marshmallow

Page 2: Android Marshmallow (13.11.2015)

Давайте познакомимся…

Mobile Dimension LLC

Старший Android Разработчик

Учебный центр «Jolly Droid»Основатель и преподаватель

[email protected]

Игорь Цеглевский

http://mobiledimension.ru

http://jollydroid.ru

Page 3: Android Marshmallow (13.11.2015)

Marshmallow

Page 4: Android Marshmallow (13.11.2015)

Permissions

Page 5: Android Marshmallow (13.11.2015)

Permissions

• targetSdkVersion=22– Permissions (права доступа) работают как прежде:

разрешено всё, что описано в манифесте

– Пользователь может в настройках отозвать любое из прав! • Андроид предупреждает, что это может вызвать падение

приложения, но не запрещает

• При изменении списка прав приложение будет остановлено

– Если пользователь отозвал права, то соответствующие API вернут 0 или null

Page 6: Android Marshmallow (13.11.2015)

Permissions

• targetSdkVersion=23

– «Нормальные» права доступа даются автоматически

– «Опасные» права необходимо запросить явно, для каждой группы

– «Опасные» права пользователь может отозвать в настройках приложения. Приложение должно всегда (каждый раз при обращении к соответствующим API) проверять наличие прав

Page 7: Android Marshmallow (13.11.2015)

Permissions. Steps

ActivityCompat.shouldShowRequestPermissionRationale()

ContextCompat.checkSelfPermission()

Нет

ActivityCompat.requestPermissions()

Notification-Объяснение

Работаем

Да

Нет

Да

Page 8: Android Marshmallow (13.11.2015)

Permissions. Steps

Page 9: Android Marshmallow (13.11.2015)

Permissions. Steps

grantResults[0] ==PackageManager.PERMISSION_GRANTED

Учитываем в работе или информируем пользователя

onRequestPermissionsResult()

Работаем

Нет

Да

Page 10: Android Marshmallow (13.11.2015)

Permissions. Interface

Page 11: Android Marshmallow (13.11.2015)

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)

ID

Page 13: Android Marshmallow (13.11.2015)

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)

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)

App Standby and Doze Mode

Page 16: Android Marshmallow (13.11.2015)

Doze Mode & App Standby

• Doze Mode – режим, в который устройство переходит, если находится некоторое время с залоченным экраном, без движения и работающее от батарей

• App Standby – лишение ресурсов приложений, которые давно не использовались

Page 17: Android Marshmallow (13.11.2015)

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)

Doze Mode. Что работает

• AlarmManager– set[Exact]AndAllowWhileIdle() не чаще раз в 15

минут

– setAlarmClock()

• GCM messages with high priority

• Сеть и Wake Locks, если приложение в белом списке

• Все приложения получают возможность выполнить работу в течение Maintenance window

Page 19: Android Marshmallow (13.11.2015)

Doze ModeMaintenance window наступит через:• 1 час• 2 часа• 4 часа• 6 часов (и далее каждые 6 часов)

Page 20: Android Marshmallow (13.11.2015)

Doze Mode. Отладка

• Запустить приложение

• Залочить экран• adb shell dumpsys battery unplug

• adb shell dumpsys deviceidle step

Page 22: Android Marshmallow (13.11.2015)

Doze Mode. Работа

Page 23: Android Marshmallow (13.11.2015)

Doze Mode. Работа

Page 24: Android Marshmallow (13.11.2015)

White list

• Приложению из white list доступна сеть и Wake lock-и

• Пользователь может включить сам:

– Настройки –> Батарея -> Экономия заряда батареи -> Все приложения -> App -> Не экономить

– Settings -> Battery -> Battery Optimization

• Можно запросить программно

Page 25: Android Marshmallow (13.11.2015)

White list

Page 26: Android Marshmallow (13.11.2015)

White list

Page 27: Android Marshmallow (13.11.2015)

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)

App Standby. Условия

Приложение может быть переведено в standby только если одновременно:

• Устройство работает от батареи

• Неверно следующее:– Пользователь явно запустил приложение.

– Приложение имеет foreground процесс

– Есть видимое уведомление (Notification), созданное приложением.

• Приложение не в белом списке

Page 29: Android Marshmallow (13.11.2015)

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)

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)

Notifications

Page 32: Android Marshmallow (13.11.2015)

Notifications

• Notification.setLatestEventInfo() удален.

– Для обновления повторно используйте Notification.Builder и NotificationManager.notify() cтем же id.

• adb shell dumpsys notification --noredact

• У NotificationManager появился метод StatusBarNotification[] getActiveNotifications()

Page 33: Android Marshmallow (13.11.2015)

Notifications. Ресурсы

• http://developer.android.com/intl/ru/reference/android/app/NotificationManager.html#getActiveNotifications()

Page 34: Android Marshmallow (13.11.2015)

Text Selection

Page 35: Android Marshmallow (13.11.2015)

Text Selection

Page 36: Android Marshmallow (13.11.2015)

Text Selection

Page 37: Android Marshmallow (13.11.2015)

Text Selection. Callback

Page 38: Android Marshmallow (13.11.2015)

Text Selection. Callback

Page 39: Android Marshmallow (13.11.2015)

Text Selection

Page 40: Android Marshmallow (13.11.2015)

Text Selection. Грабли

Где наши пункты??

Page 41: Android Marshmallow (13.11.2015)

Text Selection. Грабли

• Не всё помещается, появляется невидимый скролл• Порядок задается с помощью android:orderInCategory,

родные нумеруются 1..5• Менюшка fullscreen input mode не дополняется таким

способом (можно выключить с помощью android:imeOptions="flagNoExtractUi")

Page 42: Android Marshmallow (13.11.2015)

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)

App Links

Page 44: Android Marshmallow (13.11.2015)

App Links

Page 45: Android Marshmallow (13.11.2015)

App Links

• https://<your host>/.well-known/assetlinks.json

– Обязательно HTTPS!!

Page 46: Android Marshmallow (13.11.2015)

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)

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)

Auto Backup

Page 49: Android Marshmallow (13.11.2015)

Auto Backup

• Auto backup происходит, когда:

– Устройство не используется

– Находится на зарядке

– Подключено к WiFi

– С момента последнего бэкапа прошло более 24 часов

Page 50: Android Marshmallow (13.11.2015)

Auto Backup

• Не попадут файлы из каталогов– getCacheDir()

– getCodeCacheDir()

– getNoBackupFilesDir()

• С внешнего стораджа попадут только файлы из каталога getExternalFilesDir()

• Общий объем не более 25МБ на приложение– При превышении объема бэкап останавливается,

«в облаке» остается последнее сохраненное состояние

Page 51: Android Marshmallow (13.11.2015)

Auto Backup. Config

Page 52: Android Marshmallow (13.11.2015)

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)

Auto Backup. Config

• path – относительное имя файла

– С расширением! Т.е. еслиgetSharedPreferences("pref1", MODE_PRIVATE), то <exclude domain="sharedpref"path="pref1.xml"/>

Page 54: Android Marshmallow (13.11.2015)

Auto Backup. Event

Page 55: Android Marshmallow (13.11.2015)

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)

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)

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)

Вопросы?

Page 59: Android Marshmallow (13.11.2015)

Спасибо за внимание!

[email protected]

http://jollydroid.ruhttp://mobiledimension.ru