> For the complete documentation index, see [llms.txt](https://docs.taptalk.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.taptalk.io/~/changes/FMvVnz8ZkLFBmR0Wx2wq/powertalk-chat-sdk-documentation/powertalk-android/enable-chat-features.md).

# Enable Chat Features

Please follow the following steps to enable TapTalk.io's chat features, such as contact sync and sending media, document, and location messages.

### Add Permissions

Some of TapTalk.io's chat feature may require permissions to be added to your app. To do so, open **AndroidManifest.xml** file in your project and add the following permissions under the <`manifest>` tag if they are not yet present:

{% code title="AndroidManifest.xml" %}

```markup
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package.name">

    <!--Permission for contact sync-->
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <!--Permission for media messages-->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!--Permission for location messages-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!--Permission for voice messages-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    
    ...
    
</manifest>
```

{% endcode %}

### Setup FileProvider in your application

To enable file transfer through chat messages, you need to define FileProvider in your application's **AndroidManifest.xml** file, under the `<application>` tag.

{% code title="AndroidManifest.xml" %}

```markup
<application
    android:name=".YourApplication"
    ...>

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

</application>
```

{% endcode %}

If your project already has defined paths, make sure the following paths exist in your paths xml file:

{% code title="your\_file\_paths.xml" %}

```markup
<paths>
    <files-path name="YourFilesPath" path="." />
    <external-path name="YourExternalPath" path="." />
    <cache-path name="YourCachePath" path="."/>
    <external-files-path name="YourExternalFilesPath" path="."/>
    <external-cache-path name="YourExternalCachePath" path="."/>
</paths>
```

{% endcode %}

### Initialize Google Places API Key (Optional)

To enable location search result preview while sending location message, a Google Places API Key is required. To obtain the API key for your application, you can check [the documentation](https://developers.google.com/places/web-service/get-api-key) provided by Google. To initialize, insert your obtained key using the `initializeGooglePlacesApiKey()` method.

{% tabs %}
{% tab title="Java" %}

```java
TapTalk.initializeGooglePlacesApiKey(GOOGLE_PLACES_API_KEY);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
TapTalk.initializeGooglePlacesApiKey(GOOGLE_PLACES_API_KEY)
```

{% endtab %}
{% endtabs %}

Your key also needs to be defined in your application's **AndroidManifest.xml** file, under the `<application>` tag.

{% code title="AndroidManifest.xml" %}

```markup
<application
    android:name=".YourApplication"
    ...>

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="GOOGLE_PLACES_API_KEY" />

</application>
```

{% endcode %}

{% hint style="info" %}
**Parameters**\
**GOOGLE\_PLACES\_API\_KEY**: (String) Google Places API Key
{% endhint %}

### Enable Cleartext Traffic

To enable some features, such as sending link preview in messages, please enable `usesCleartextTraffic` in **AndroidManifest.xml** file.

{% code title="AndroidManifest.xml" %}

```markup
<application
    android:name=".YourApplication"
    ...
    android:usesCleartextTraffic="true">

    ...

</application>
```

{% endcode %}
