Android Version
6.0
Released 07 Dec 2015
(10 years ago)
SoftwareAndroid OS
Version6.0
Release date02 Oct 2015
(10 years ago)
CodenameMarshmallow
API level23
Security supportNo
Source codehttps://android.googlesource.com/platform/frameworks/base/+/android-6.0.1_r1
Documentationhttps://source.android.com/docs/setup/about/build-numbers
Android OS 6.0 ReleasesView full list

What Is New in Android 6.0

Category Key Changes
Permissions Runtime permission requests, Simplified install & update flows
Power & Charging Doze and App Standby for battery optimization, USB-C support
User Experience Fingerprint authentication, App Links, Text selection
Media & Connectivity 4K display support, Bluetooth stylus support, Hotspot 2.0
APIs & Development Adoptable Storage, Camera services, Audio direct playback

How did Android 6.0 change app permissions?

Android 6.0 (Marshmallow) introduced a fundamental shift to runtime permissions. Instead of granting all permissions at install time, users now grant them when the app needs them during use. This creates a smoother install experience and puts users in control.

Your app must now check for and request permissions like CAMERA or READ_CONTACTS at runtime using methods like checkSelfPermission() and requestPermissions(). This matters because it forces developers to handle permission denial gracefully instead of assuming they are always granted.

What are Doze and App Standby for?

Doze and App Standby are two major battery optimization features. Doze automatically engages when a user leaves their device stationary and unplugged for a period, deferring background network and CPU activity.

App Standby applies to apps that the user hasn't actively used. It defers their network activity and background jobs. In practice, this means your app's syncs and alarms may be delayed until the device exits Doze or the app is opened again. Use new APIs like isIgnoringBatteryOptimizations() to check your state.

How does fingerprint authentication work for developers?

Marshmallow added a standardized system API for fingerprint authentication. This lets your app use the device's fingerprint sensor for user auth, moving beyond just unlocking the phone.

You interact with the FingerprintManager class to start the authentication process. The system then handles the complex UI and sensor interaction, providing your app with a simple success or failure callback. This is a huge win for security-focused apps like banking or password managers.

What are Android App Links?

Android App Links (http-based intent filters) allow your app to claim a web domain. When a user clicks a link that belongs to your claimed domain, the app opens immediately instead of showing a disambiguation dialog.

To set this up, you declare intent filters in your manifest with the android:autoVerify="true" attribute and host a Digital Asset Links JSON file on your web server. This creates a seamless connection between your website and your Android app.

What other APIs should I know about?

Adoptable Storage allows external storage (like an SD card) to be encrypted and formatted to behave like internal storage. This lets you install apps and store private data on it.

New camera services (Camera2) offer more manual control over capture settings. For audio, AudioTrack and AudioRecord gained support for direct playback and capture using uncompressed data, which is critical for high-performance audio apps.

FAQ

Do I need to update my existing app for Android 6.0?
Yes, if your app targets API level 23 or higher, or if it uses dangerous permissions. You must implement the runtime permission checks or your app will crash when it tries to access restricted data without permission.

How do I test the new Doze mode?
You can force Doze mode on a connected device or emulator using adb commands: adb shell dumpsys battery unplug and adb shell dumpsys deviceidle force-idle. This is essential for testing how your background services behave.

Can I still use the old permission model?
Only if your app's targetSdkVersion is set to 22 or lower. However, Google Play requires new apps and updates to target a much higher API level now, so you will eventually have to adopt the runtime model.

What happens if a user denies a runtime permission?
Your app must handle this gracefully. The requestPermissions() method will return a result indicating the denial. You should disable the feature that requires the permission and explain to the user why it's needed, perhaps with an in-app message.

Are all permissions subject to runtime requests?
No. Only permissions classified as "dangerous" (e.g., camera, location, contacts, storage) require runtime grants. "Normal" permissions are still granted automatically at install time.

Releases In Branch 6.0

VersionRelease date
6.0.1_r107 Dec 2015
(10 years ago)
6.0.0_r102 Oct 2015
(10 years ago)