«android marshmallow — будь готов». Денис Неклюдов
TRANSCRIPT
Android Marshmallow будь готов!
Неклюдов Денис
target_sdk = 23
Auto Backup
Лимит в 25 Mb на одно приложение в шифрованной части Drive(не затрагивает пользовательскую квоту)
Бэкап осуществляется каждые 24 часа, при зарядке, когда устройством не пользуются, и оно подключено к Wi-Fi
Auto Backup
Не сохраняются:External Storage Files (кроме getExternalFilesDir())
getCacheDir()getCodeCacheDir()getNoBackupFilesDir()
Auto Backup
<android:fullBackupContent="@xml/mybackupscheme"><full-backup-content>
<[exclude, include] domain=["file" | "database" | "sharedpref"| "external" | "root"] path="string”>
</full-backup-content>
! не бекапить данные аккаунтов, токены в т.ч. GCM
@OverrideonRestoreFinished()
Apache Client Deprecation
Если осталась необходимость использовать HttpClient:
android {
useLibrary 'org.apache.http.legacy'
}
Other Deprecations
libcrypto.so и libssl.so из OpenSSLзаменены на BoringSSL
notification.setLatestEventInfo() удаленВместо него: Notification.Builder
Adoptable storage
Context methods:
getFilesDir()
getCacheDir()
getCodeCacheDir()
getDatabasePath()
getDir()
getNoBackupFilesDir()
getFileStreamPath()
getPackageCodePath()
getPackageResourcePa
th()
ApplicationInfo fields:
dataDir
sourceDir
nativeLibraryDir
publicSourceDir
splitSourceDirs
splitPublicSourceDirs
Five more changes
Android Keystore Changes (упразднениe DSA)
Wi-Fi and Networking Changes (управление соединениями,
мультисоединение всегда)
Camera Service Changes (приоритеты, несколько
приложений для нескольких камер)
Runtime(багфиксы в ART)
Access to Hardware Identifier (нет доступа к макадресам из
сети, новые права доступа)
The cat goes idle
Idle
Doze Mode and App Standby
Doze mode
● Доступ приложению к сети отключен, пока приложение не получит high-priority GCM-push.
● Система игнорирует Wake lock’и.
● Alarm’ы запланированные в AlarmManager не будут вызываться, кроме тех, которые будут обновлены с помощью setAndAllowWhileIdle().
● Система не производит поиска сетей Wi-Fi.
Doze mode
● NetworkPolicyManagerService Пропускает только приложения из белого списка.
● JobSchedulerService Все текущие задачи отменяются. Новые откладываются до пробуждения.
● SyncManager Все текущие отменяются, новые откладываются до пробуждения.
● PowerManagerService Только задачи приложений из белого списка вызовутся.
Doze mode: step by step
Doze mode: step by step
DeviceIdleController:
ACTIVE - Устройство используется или на зарядке
INACTIVE - Устройство недавно вышло из активного режима
(пользователь выключил экран, выдернул зарядку и т.п.)
...30 минут
IDLE_PENDING - Устройство готовится перейти в режим ожидания
...30 минут
IDLE - Устройство в режиме бездействия
IDLE_MAINTENANCE - Открыто короткое окно, чтобы приложения
выполнили свою работу
Doze mode: exclusions
setAndAllowWhileIdle()- у обработчика есть 10 секунд, затем уходит в IdleОстальные алармы - в бездействии, пока активен Doze Mode
GCM:
Пуш уведомление с высочайшим
приоритетом дает получившему его
приложению недолгий доступ к сети.
Whitelist:Alarm Manager:
Standby mode
1. Пользователь явно запустил приложение.
2. Приложение имеет процесс, работающий в
данный момент на переднем плане (Activity
или foreground service, или используется
другой activity или foreground service’ом).
3. Приложение создало уведомление, которое
висит в списке уведомлений.
4. Пользователь принудительно добавил
приложение в список исключений
оптимизации в настройках системы.
Permissions
Permissions
SDK < 23
1.Описать все
разрешения в manifest
2.Пользователь
разрешит сразу все
при установке
3.Пользователь может
запретить любое из
разрешений после
установки
SDK >= 23
1.Описать только
PROTECTION_NORMAL
запросы в manifest
2.Пользователь их все
подтвердит при
установке
3.Когда приложению
нужен доступ к
одному или
нескольким
разрешениям из
группы опасных,
Permissions
1. ContextCompat.checkSelfPermission
(Context context, String permission)
2. ActivityCompat.requestPermissions();
3. ActivityCompat.OnRequestPermissionsResultCallback
Permissions
Хорошие практики:• Запрашивать лишь те разрешения, которые
действительно нужны
• Если есть возможность, вместо запроса
воспользоваться внешним Intent
• Запрашивать разрешение, только перед тем, когда оно
понадобится
• Пояснять пользователю, для чего запрашивается
разрешение
Fingerprint
<uses-permission
android:name="android.permission.USE_FINGERPRINT" />
Для использования:
android.hardware.fingerprint.FingerprintManager;
isHardwareDetected();
hasEnrolledFingerprints()
authentificate(...)
Confirm Credential
Для ипользования:
KeyguardManager.isKeyguardSecure()
KeyGenerator.generateKey();
setUserAuthenticationValidityDurationSeconds()
KeyguardManager.createConfirmDeviceCredentialI
ntent()
Text Selection
Для исользования:
startActionMode(Callback, ActionMode.TYPE_FLOATING)
App Linking
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category
android:name="android.intent.category.DEFAULT" />
<category
android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"
android:host="www.android.com" />
<data android:scheme="https"
android:host="www.android.com" />
</intent-filter>
App Linking
Положить JSON на свой сайт(https://www.domain1.com/.well-known/assetlinks.json)
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:9
6:B2:3F:CF:44:E5"]
}
}]
Direct share
Необходимо создать Service, наследник ChooserTargetService
<serviceandroid:name=".YourChooserTargetService"android:label="@string/yourLabel»
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"><intent-filter>
<actionandroid:name="android.service.chooser.ChooserTargetService" />
</intent-filter></service>
Voice Iteraction
Проверить доступность:
activity.isVoiceInteraction()
Взаимодействовать припомощи VoiceInteractor
Спасибо за внимание!
Денис Неклюдовplus.google.com/+ДенисНек