Androidインターフェースコール:URL Scheme

6402 ワード

Android開発では、異なるActivity間のジャンプと切り替えが一般的であり、アプリの内容がより豊富になり、機能が多様になるが、1つのアプリケーションに含まれる機能は限られており、アプリケーションで微信決済のページにジャンプしたり、サードパーティのアカウントでログインしたりする際にQQログインにジャンプしたりするなど、多くのシーンでアプリケーション間呼び出しが必要である.このような場合、スキップするActivityまたはApplicationはサードパーティが開発したものであり、どのActivityに具体的にスキップするか、または直接スキップするかは安全ではない可能性が高い.これらの問題は、アプリケーション間呼び出し時に周到に考慮される必要がある.この問題をよりよく解決するために、AndroidのURL Schemeプロトコルについてご紹介します
URL Schemeの概要
AndroidのカスタムURL Schemeは、ページ内ジャンププロトコルであり、URLRouterとも呼ばれ、明示的なIntent方式で直接ジャンプするのではなく、ページを開くようにルーティングを通じてActivityを開くことです.このような暗黙的なintentの方法のジャンプのメリットは以下の通りです.
  • 結合性を低下させる:具体的にどのインタフェースをジャンプするかを知る必要はなく、需要に応じて、約束されたURLルーティングプロトコルに従ってIntentを送信すればよい.
  • より安全:Intentジャンプを表示せず、プロトコルに合致するIntentであれば対応するActivityがマッチングし、表示されないページにジャンプすることを避ける.
  • より柔軟:より広範な応用シーンがあり、シーンの中でURL Scheme
  • を使用することができます.
  • サーバはジャンプパスを発行し、クライアントはサーバのジャンプパスに従って対応するページ
  • をジャンプする.
  • H 5ページアンカーポイントをクリックし、アンカーポイントの具体的なジャンプパスAPP端に基づいて具体的なページ
  • をジャンプする.
  • APP側はサーバ側から送信されたPUSH通知欄のメッセージを受け取り、メッセージのクリックジャンプ経路に従って関連ページ
  • をジャンプする.
  • APPはURLに従って別のAPP指定ページ
  • にジャンプする.
    URL Schemeプロトコルフォーマット
    前述したように、URL Schemeは、ウェブページを開くようにルーティングを通じてActivityを開き、そのプロトコルフォーマットは私たちがウェブページを開いて入力したウェブサイトと似ています.
    完全な完全なURL Schemeプロトコルフォーマットは、scheme、host、port、path、queryから構成され、以下のように構成されています.
    ://:/?
    このうちschemeはAndroidでよく見られるプロトコルでも、カスタマイズされたプロトコルでもあります.Androidでよく見られるプロトコルにはcontentプロトコル、httpプロトコル、fileプロトコルなどがあり、カスタムプロトコルはカスタム文字列を使用することができ、サードパーティのアプリケーションを起動するときにカスタムプロトコルを使用することが多い.
    以下にカスタムプロトコルのURIを示します.
    xl://goods:8888/goodsDetail?goodsId=10011002
    上のパスでScheme、Host、port、path、queryをすべて含みます.
  • xl、すなわちSchemeであり、このSchemeプロトコル名
  • を表す
  • goods、すなわちHostは、Schemeがどのアドレスドメインに作用するかを表す
  • である.
  • 8888、すなわちportであり、この経路を表すポート番号
  • である.
  • goodsDetail、すなわちpathであり、Schemeが指定したページ
  • を表す
  • goodsId、すなわちqueryであり、伝達されたパラメータ
  • を表す
    URL Schemeの使い方
    URL Schemeの使用方法は簡単に言えば、まずmanifestにScheme方式の起動を受け入れるactivityを配置することである.呼び出しが必要な場合は、SchemeプロトコルのURiをデータとしてIntentに追加し、activityを暗黙的に呼び出します.
    1). AndroidManifestでxmlでのラベル追加設定Scheme
    
         
            
            
        
         
            
            
            
            
            
            
            
            
        
        
            
            
            
        
    
    

    上記の設定では、MainActivityには複数の設定が含まれています.最初は通常の起動、つまりアプリケーションリストで起動します.2つ目はURL Scheme方式で起動し、それ自体も暗黙的なIntent呼び出しの一種であり、属性を追加し、その受け入れURL Schemeプロトコルフォーマットをuと定義するのとは異なる.rlschemel://auth_activity
    ここで説明する必要があるのは、URL Schemeプロトコルフォーマットでは、URIを構成するこれらの属性はラベルではオプションであるが、以下の依存関係がある.
  • schemeが指定されていない場合、hostパラメータは
  • 無視されます.
  • hostが指定されていない場合、portパラメータは
  • 無視されます.
  • schemeとhostが指定されていない場合、pathパラメータは
  • 無視されます.
    intentオブジェクトのUriパラメータをintent-filterのラベルで指定されたURI形式と比較すると、intent-filterのラベルで指定された部分のみを比較します.たとえば、次のようにします.
  • intent-filterでschemeのみが指定されている場合、sheme付きURIはすべてintent-filterに一致します.
  • intent-filterでschemeとauthority(authorityはhostとportの2つの部分を含む)のみが指定されてpathが指定されていない場合、pathの値を考慮することなく、同じschemeとauthorityを持つURIすべてがintent-filterに一致する.
  • intent-filterでscheme、authority、pathが同時に指定されている場合、intent-filterに一致するのは、同じscheme、authority、pathを持つURIのみです.

  • 注意すべきは、intent-filterのラベルがpathの値を指定するときに、ワイルドカード*を使用して部分的に一致する効果を果たすことです.
    2). URLを使用してActivityを起動
      Uri data = Uri.parse("urlschemel://auth_activity");
      Intent intent = new Intent(Intent.ACTION_VIEW,data);
      //      APP      ,        APP   APP            
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      try {
        startActivityForResult(intent, RESULT_OK);
      } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(MainActivity.this, "     APP,     ",Toast.LENGTH_SHORT).show();
      }
    

    もちろんWebページで呼び出すことができます
     しいアプリケーションを く
    

    あるいはJSで呼び出す
    window.location = "urlschemel://auth_activity";
    

    3.)URL Schemeが有効かどうかをどう判断するか
    boolean checkUrlScheme(Intent intent){
        PackageManager packageManager = getPackageManager();
        List activities = packageManager.queryIntentActivities(intent, 0);
        return !activities.isEmpty();
    }
    

    Home LauncherでサブAPPを非表示にする
    いくつかの補助的で独立したAPPをHome Launcherに隠す必要があり、特定のAPP呼び出しのみを許可する場合があります.このとき、URL Schemeプロトコルを利用してAndroidManifestを設定することができます.xmlのラベルは次のとおりです.
    
        
            
            
            
            
            
            
            
        
    
    

    Home LauncherにリストされているアプリケーションアイコンはActivityと同時に満たす必要があるため

  • 上記の構成では余分なcategoryとdata制限が存在するため、一致せず、Home Launcherには現れませんが、URL Schemeを使用して起動できます.
      Uri data = Uri.parse("urlschemel://auth_activity");
      Intent intent = new Intent(Intent.ACTION_MAIN,data);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    

    これにより、一連のAPPに統一的なエントリを設定し、実際のニーズに応じて異なるサブAPPを呼び出すことができます.いわゆるAPP業務のコンポーネント化であり、URL Schemeはその中で重要な役割を果たしています.
    参考文献:http://blog.csdn.net/iispring/article/details/48481793 http://blog.csdn.net/hb707934728/article/details/53196419 http://www.cnblogs.com/whoislcj/p/5825333.html