The Browsers category is in beta  
At this time, anyone can publish browsers to internal testing tracks on the Play Store. Publishing to closed testing, open testing, and production tracks will be permitted at a later date.  
[Nominate yourself to be an early access partner →](https://forms.gle/VsXEdDEBidxw8q8u8)  
![](https://developer.android.com/static/images/picto-icons/test-tube-2.svg)

Beyond the requirements described in[Build parked apps for cars](https://developer.android.com/training/cars/parked)and[Add support for Android Automotive OS to your parked app](https://developer.android.com/training/cars/parked/automotive-os), there are a few additional requirements specific to browsers that are detailed on this page.
| **Important:** Make sure your app meets the[quality guidelines for browsers](https://developer.android.com/docs/quality-guidelines/car-app-quality?category=browser), as it is reviewed against them when submitted to tracks other than internal testing.

## Mark your app as a browser

To indicate that your app is a browser, it must include an intent filter such as the following within an exported`<activity>`element:  

    <activity ...
        android:exported="true">
      ...
      <intent-filter>
        <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"/>
      </intent-filter>
    </activity>

| **Caution:** Don't include any[`<data>`](https://developer.android.com/guide/topics/manifest/data-element)elements in this intent filter that define the[`android:host`](https://developer.android.com/guide/topics/manifest/data-element#host)or[`android:port`](https://developer.android.com/guide/topics/manifest/data-element#port)attributes.

## Allow users to block access to sensitive data

Unlike many Android devices, Android Automotive OS vehicles are often shared devices. To give users the ability to protect their sensitive data such as passwords and payments information, browsers built for Android Automotive OS[must not save or allow access to passwords or payment information unless the user can block access to passwords using a profile lock](https://developer.android.com/docs/quality-guidelines/car-app-quality?category=browser#SD-1). Authentication can be accomplished either by using the device credential or by building an authentication system within your app.

Additionally, before syncing sensitive data, browsers built for Android Automotive OS[must prompt the user to authenticate and provide messaging to let the user know that their data is being synchronized to the car](https://developer.android.com/docs/quality-guidelines/car-app-quality?category=browser#SD-2). If the user does not have any method of authentication set up, you can prompt them to set one up when they try to sync sensitive data, using either the[device credential](https://developer.android.com/training/cars/parked/browser#open-settings)or one specific to your app.

## Use the device credential for authentication

This section provides guidance on how to use the device credential and system authentication APIs to meet the sensitive data requirements described prior.

### Check if there is a device credential set

To determine if the user has secured their device with a PIN, pattern, or password, you can use the[`KeyguardManager::isDeviceSecure`](https://developer.android.com/reference/android/app/KeyguardManager#isDeviceSecure())method.  

### Kotlin

```kotlin
val keyguardManager = context.getSystemService(KeyguardManager::class.java)
val isDeviceSecure = keyguardManager.isDeviceSecure()
```

### Java

```java
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean isDeviceSecure = keyguardManager.isDeviceSecure();
```

### Open the lock screen settings

To reduce user friction in the case they need to set a device credential, you can open up the Security screen within the Settings app using the[`Settings.ACTION_SECURITY_SETTINGS`](https://developer.android.com/reference/android/provider/Settings#ACTION_SECURITY_SETTINGS)intent action.  

### Kotlin

```kotlin
context.startActivity(Intent(Settings.ACTION_SECURITY_SETTINGS))
```

### Java

```java
context.startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS))
```

### Prompt the user to authenticate

To prompt the user to authenticate, you can use the`BiometricPrompt`API as described in[Show a biometric authentication dialog](https://developer.android.com/training/sign-in/biometric-auth).
| **Caution:** Despite the name, you should only use the[`DEVICE_CREDENTIAL`](https://developer.android.com/reference/androidx/biometric/BiometricManager.Authenticators#DEVICE_CREDENTIAL)authenticator and not any of the biometric ones, as Android Automotive OS vehicles with Google built-in don't have biometric sensors.