Android O Preview1でconnectivitymanagerクラスで見当たらないメソッド

385 views
Skip to first unread message

m saito

unread,
Apr 30, 2017, 8:33:03 AM4/30/17
to android-g...@googlegroups.com
いつもお世話になります。

Andorid O Preview1で当方作成の既存アプリの動作検証を行っています。
そこで困ったことがあり解決策を模索しています。
まず、Andorid O Preview1をNexus6Pにインストールして既存アプリの動作検証を行ったところ問題はありませんでした。
しかし、AndroidStudio2.4でComplile Sdk versionを25+に設定したところビルド時にconnectivitymanagerクラスの以下のメソッドがundefエラーとなっていまいました。
・startUsingNetworkFeature
・stopUsingNetworkFeature
・requestRouteToHost

まだ、Preview1ということもありますが、もし、同様の現象が発生し、回避された方がいらっしゃいましたらご教授願いたいと思い投稿しました。

よろしくお願いします。

北原 健太郎

unread,
Apr 30, 2017, 10:43:49 AM4/30/17
to 日本Androidの会

お世話になっております、北原と申します。

>まだ、Preview1ということもありますが
突然変わったわけではないかと思いますし、このままなくなるかと思います。
といいますのも、ConnectivityManager.javaのソースでは以前から非推奨を促しているようです。

Android 5.0で非推奨が警告されていて
>    879      * @deprecated Deprecated in favor of the cleaner {@link #requestNetwork} api.

Android 6.0移行では、強く非推奨を警告され、更にrequestNetworkへのリンクが提示されています。
>    897      * @deprecated Deprecated in favor of the cleaner
>    898      *             {@link #requestNetwork(NetworkRequest, NetworkCallback)} API.
>    899      *             In {@link VERSION_CODES#M}, and above, this method is unsupported and will
>    900      *             throw {@code UnsupportedOperationException} if called.
>    902     public int startUsingNetworkFeature(int networkType, String feature) {

なので、下記のようにrequestNetworkに対するonAvailableコールバックで判定するべきなのかと思います。


2017年4月30日日曜日 21時33分03秒 UTC+9 lennon1955:

m saito

unread,
May 1, 2017, 3:37:36 AM5/1/17
to android-g...@googlegroups.com
北原様
回答ありがとうございます。
確かに問題のメソッドはAndroid5.0で非推奨となっています。
当方のアプリはAndroid4.4(KitKat)以降が動作対象となっており、ロジック中でSDKのAPIレベルを判定して4.4であれば問題のあったメソッドを使用し、Android5.およびAndroid6以降では別なクラス、メソッドを使用しています。
しかし、Compaile Sdk verが25+では問題となっているメソッドが非推奨ではなくUndefとなっているためアプリで使用することができなくなっています。
最悪、Android4.4(KitKat)は動作保証対象外とすることも考えていますが、まだまだシェアは20%程度あり迷うところです。

2017年4月30日 23:43 北原 健太郎 <kitahara...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-japan+unsub...@googlegroups.com にメールを送信してください。
このグループに投稿するには android-group-japan@googlegroups.com にメールを送信してください。
https://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

北原 健太郎

unread,
May 1, 2017, 5:51:09 AM5/1/17
to 日本Androidの会
返信ありがとうございます、北原です。

APIレベル別にすでに対応済みということであれば、4.4系など(Oより以前)に
ついてはリフレクションを使用してメソッドを検索し、もしあればinvokeで呼び出し
という形で記述するのが無難かなと思いますが如何でしょうか?

廃止されたメソッドの場合にはnullが返却されますので
エラーハンドリングもしやすいです。引数関係が少し面倒ですが
非公開API、リフレクション、あたりで検索すると色々でます。

これで、下位互換保ったままビルドも通るかと思います。
如何でしょうか?

m saito

unread,
May 2, 2017, 9:30:13 AM5/2/17
to android-g...@googlegroups.com
北原様
返信いただきありがとうございます。
リフレクションも検討項目に入っているのですが、非公開メソッドを使用することについて品質管理部署が難色を示しています。(使用しているアプリもあるのですが)
しかし、手段がない場合は自分としては北原様の指摘のあったリフレクションで非公開APIを使用するか、Android4.4を対象外とする方法が現状ではよいのかと思っています。
どちらにしてもリリースまでは時間がありますので、色々と手段を探ってみます。
進展がありましたら、ご報告いたします。


2017年5月1日 18:51 北原 健太郎 <kitahara...@gmail.com>:

--
Reply all
Reply to author
Forward
0 new messages