Android の APN 認証情報と Network ProxyInfo は別の目的を担う
Android が対応するインターフェースを通じてネットワークプロキシ設定を読み取り、キャリアのアクセス認証情報は HTTP プロキシのアカウントとは分けて扱います。
Android アプリが接続設定を所有していなくても、現在のプロキシ アドレスを必要とすることがあります。user や password というデータベース列を探すのではなく、ネットワーク プロキシのインターフェースから始めてください。
テレフォニーの APN 設定はキャリアのアクセスを記述します。そのアカウント フィールドはこの設定に属します。Wi-Fi、管理対象ネットワーク、アプリのプライベート接続で選択された HTTP プロキシのための汎用的な認証情報ストアではありません。
| 必要な情報 | 関連する設定 |
|---|---|
| キャリアのデータ アクセス アカウント | APN 設定 (プラットフォームのアクセス制限付き) |
| 現在のネットワーク HTTP プロキシ | ConnectivityManager と ProxyInfo |
| 選択したプロキシが要求するログイン | クライアントが対応する認証フローと承認済みのアカウント取得元 |
対応する Android バージョンでは、ConnectivityManager.getDefaultProxy() が該当するプロキシ情報を返します。結果が存在しないこともあります。ProxyInfo は直接エンドポイントや PAC 構成を表すことがあるため、すべての結果をホストとポートの組として扱う前にその形式を確認してください。
ProxyInfo は汎用的なユーザー名とパスワードの組を公開しません。選択したサービスが認証を要求する場合は、アプリが対応する認証情報の仕組みを通じて意図されたアカウントを取得してください。プロキシのチャレンジとキャリアのログインはまったく別の ID を使うことがあります。
これは検出と利用も分けます。ネイティブ ソケットや独自のトランスポートを持つ SDK は、アプリが ProxyInfo を読めるというだけでプロキシ対応になるわけではありません。選択した経路は、そのプロトコルと認証方式に対応したクライアントに渡してください。
テレフォニーのコンテンツ プロバイダーに問い合わせる古い例は、特定の Android リリースと権限を記述したものです。有用な歴史的経緯ですが、APN アカウントを無関係なプロキシの不足したパスワードに変えることはできません。