> For the complete documentation index, see [llms.txt](https://docs.mluvii.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mluvii.com/pro-it-specialisty/mobilni-sdk/android-library.md).

# Android Library

Mluvii poskytuje library pro integraci s vaší aplikací. Minimální verze Androidu je 5.0, protože v nižších verzích není webview postaveno na Chromiu, které se samo aktualizuje a proto je zastaralé. Námi poskytnutý kód umožňuje:

* inicializace webview s widgetem s údaji vaší společnosti

```
MluviiLibrary.getMluviiWebView(Context, Název_serveru, ID_Společnosti, ID_Tenantu, Název_balíčku, jazyk);
```

* oznámení o změně stavu widgetu

```
 MluviiLibrary.setStatusOnlineCallback(() ->{});
 MluviiLibrary.setStatusBusyCallback(() ->{});
 MluviiLibrary.setStatusOfflineCallback(() ->{});
```

* otevření chatu

```
 MluviiLibrary.runChat();
```

* zavření chatu a načtení stránky s widgetem

```
MluviiLibrary.setCloseChatFunc(() ->{});
```

* přidání vlastního callbacku na otevření URL

```
MluviiLibrary.setUrlCallbackFunc(new MluviiLibrary.UrlCallback(){

            @Override
            public Void call() throws Exception{
                Log.d("MLUVII_URL_CALLBACK","Test url: "+this.url);
                return null;
            }
        });
```

* přidání odchytávání eventů pro Začátek a konec sezení

```
public static class MluviiEventCallback implements Callable<Void>{
        public String Event;
        public long SessionId;

        @Override
        public Void call() throws Exception {
            return null;
        }
    }
```

* přidání vlastních parametrů - u přidání vlastních parametrů je nutné je nejdříve nastavit v Administračním rozhraní viz [Aplikace](/pro-administratory/sprava-tenantu/nastaveni/aplikace.md)
* Pokud uživatel mobilní aplikace musí po otevření WebView vykonat nějakou akci (kliknout na tlačítko apod.), **doporučujeme přidat delay** např. 2 sekundy. Tím zajistíte **bezchybné uložení hodnot do existujících parametrů** sezení.
* zároveň je nutné přidat apostrofy (') nebo uvozovky (") kolem klíče i hodnoty
* parametry je nutné nastavit před zavoláním metody MluviiLibrary.runChat()

```
MluviiLibrary.addCustomData("param_name", "param_value");
```

**nebo**

```
MluviiLibrary.addCustomData('param_name', 'param_value');
```

* Pro správné fungování mluvii je také doporučeno povolit cookies ve WebView

```
if (android.os.Build.VERSION.SDK_INT >= 21) {   
     CookieManager.getInstance().setAcceptThirdPartyCookies(mluviiWebView, true);
} else {
     CookieManager.getInstance().setAcceptCookie(true);
}
```

* Aby bylo možné posílat soubory do chatu, je nutné přidat následující část kódu do vašeho projektu (do MainActivity.java souboru):

```java
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            if (requestCode == REQUEST_SELECT_FILE)    {
                uploadMessages = MluviiLibrary.getFilePathCallbacks();

                if (uploadMessages == null)
                    return;
                if (data == null && getCameraCaptureUri() != null){
                    uploadMessages.onReceiveValue(new Uri[]{getCameraCaptureUri()});
                }
                else
                    uploadMessages.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));

                uploadMessages = null;
            }
        } else {
            uploadMessage = MluviiLibrary.getFilePathCallback();
            if (null == uploadMessage) return;
            Uri result = data == null || resultCode != MainActivity.RESULT_OK ? null : (data.getData() != null ? data.getData() : getCameraCaptureUri());
            uploadMessage.onReceiveValue(result);
            uploadMessage = null;
        }

    }
```

uploadMessages a uploadMessage jsou proměnné definované takto:

```
 public ValueCallback<Uri[]> uploadMessages;
    public ValueCallback<Uri> uploadMessage;
```

Definice velikosti souboru, který je možné vložit do sezení:

`private static int REQUEST_SELECT_FILE = 65456`

{% hint style="danger" %}
***Aby bylo možné využívat audia a videa v aplikaci, je nutné Povolit práva pro přístup ke kameře a mikrofonu.***
{% endhint %}

Jako první část je nutné přidat do manifestu

```
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.CAMERA" />
```

Druhá část je pro zařízení s verzí Androidu 6.0+, kde lze kontrolovat práva za běhu aplikace

```
 if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.CAMERA)) {
                //Can add explanation why do you need this specific permissions
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
                        REQUEST_CAMERA_PERMISSION);

            } else {
                // No explanation needed; request the permission
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
                        REQUEST_CAMERA_PERMISSION);
            }
        }
```

* Pokud chcete používat video, je potřeba ve vašem produktu povolit kameru a mikrofon

## Android Library

{% embed url="<https://github.com/mluvii/MluviiAndroidLib>" %}

### Vzorový kód

K dispozici [zde](https://github.com/Mluvii/MluviiAndroidLib/blob/master/WebviewApp/app/src/main/java/mluviipoc/mluvii/com/webviewapp/MainActivity.java).
