Android - Cleartext HTTP ... not permitted例外解決方法

Exoplayerでhttpのmp3ファイルをストリーミングしようとしたが、 Cleartext HTTP traffic to www.soundhelix.com not permittedのようなエラーに会った。

2019-10-06 18:22:28.363 8724-9511/com.codechacha.exoplayer E/ExoPlayerImplInternal: Source error.
    com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: Unable to connect to http://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3
        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:282)
        .....
     Caused by: java.io.IOException: Cleartext HTTP traffic to www.soundhelix.com not permitted
        at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:124)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462)
        ....

問題の原因は、Android上で、基本的にHttpアクセスを許可しないことです。 Httpsでアクセスすると、問題がないが、そのサイトがHttpsをサポートしていないなどの理由でHttpでのアクセスを必要がある場合、例外処理をする必要があります。

Android DeveloperのOpt out of cleartext trafficを見れば、Android Pie(API28)から cleartext HTTPを無効にするとします。したがってAPI28以降でHttpにアクセスするには、 cleartext HTTPを有効にする必要です。

すべてのHttp URLに対してアクセスを許可

AndroidManifestのapplicationタグで android:usesCleartextTrafficをtrueに設定すると、すべてのHttpアドレスにアクセスすることができます。

<application
        android:label="@string/app_name"
        ...
        android:usesCleartextTraffic="true">

一部のHttp URLに対してアクセスを許可

android:usesCleartextTrafficは、すべてのHttpサイトへのアクセスを許可します。もしいくつかのサイトへのアクセスのみを許可するには、 /res/xml/network_security_config.xmlファイルを作成し、例外項目を追加する必要があります。

次のように入力すると、 secure.example.comへのアクセスのみを許可になります。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

リストをすべて作成したらAndroidManifestに android:networkSecurityConfig属性に例外リストファイルを設定します。

<application
    android:label="@string/app_name"
    ...
    android:networkSecurityConfig="@xml/network_security_config"

参考

Related Posts

codechachaCopyright ©2019 codechacha