2016-09-01 10 views
0

関数をオーバーロードしようとしています(具体的にはWebViewClient.shouldOverrideUrlLoading())。私のtargetSdkVersionは24、minSdkVersionは15です。このアプリケーションは "実験"であり、上記のターゲットと最小のSDKバージョンを持つ大きなものの一部になるため、値は意図的に選択されます。 私はすでにdeveloper.android.comでSupporting different platformsを読んでいます。ドキュメントによると、前述の関数には2つの異なるシグネチャがあります。 1つはパラメータタイプがWebViewWebRessourceRequestで、もう1つはWebViewStringです。後者はAPIレベル24で廃止されました。複数のAPIレベルの関数のオーバーロード

私の質問は次のとおりです。どちらを優先して使用すればよいですか?長期間の互換性を保証するための新しいもの(要求オブジェクトを伴うもの)、または将来のAPIで削除される可能性のある古いもの、廃止予定のものまたは、両方を無効にすることができますか?

編集 だから私は、この擬似コードのようなものが必要になります。

public class MyWebViewClient extends WebViewClient{ 
    if(**API level of device is higher than 24**){ 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, WebRessourceRequest request){...} 
    }else{ 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url){...} 
    } 
} 
+0

higherSDKのメソッドはlowerSDKのものでは使用できません。 –

+1

ユーザーのAPIレベルに応じて両方をオーバーライドできます。それぞれのAPIレベルを呼び出すことができます。 –

+0

@Prera​​kSolaそして、古いもの(パラメータとして要求を持つ関数について知らないもの)は壊れませんか? – DBX12

答えて

1

アプリの顧客の大半量をターゲットに両方の実装をサポートする必要があります。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     WebResourceRequest webResourceRequest = new WebResourceRequest() { 
      @Override 
      public Uri getUrl() { 
       return url; 
      } 

      /*Implement other methods*/ 
     }; 
     webViewClient.shouldOverrideUrlLoading(webView, webResourceRequest); 
    } else { 
     webViewClient.shouldOverrideUrlLoading(webView, url); 
    } 

EDIT: WebViewClientをオーバーライドする場合、心配する必要はありません。古いデバイスでは廃止された関数だけが呼び出されます。それらのデバイスは新しい機能について何も知らない。 新しいデバイスが新しい機能を呼び出します。

+0

これは正しい方向にあるようですが、私は少し違うものが必要です。私はそれを明確にするために質問を更新しました。 – DBX12

+0

この機能に互換性のないバージョンがない場合、これは複数のAPIをサポートする正しい方法です – AnxGotta

関連する問題