Android 애플리케이션 간 호출:URL Scheme

6556 단어
안드로이드 개발에서 서로 다른Activity 간의 점프와 전환은 흔히 볼 수 있는 것이다. 이로 인해 앱의 내용이 더욱 풍부하고 기능이 다양해진다. 그러나 한 앱이 포함할 수 있는 기능은 한계가 있기 때문에 많은 장면에서 앱에서 위챗 결제 페이지로 이동하거나 제3자 계정으로 로그인할 때 QQ로 점프하여 로그인하는 등 다양한 기능을 사용해야 한다.이러한 상황에서 점프할 Activity나 Application은 제3자가 개발한 것으로 어느 Activity로 구체적으로 점프해야 할지 모르거나 직접 점프하는 것은 안전하지 않다. 예를 들어 이런 문제들은 크로스 응용 프로그램 간 호출할 때 주도면밀하게 고려되어야 한다.이 문제를 더욱 잘 해결하기 위해 안드로이드의 URL Scheme 프로토콜을 소개합니다
URL Scheme 소개
Android의 사용자 정의 URL Scheme는 페이지 내 점프 프로토콜로 URL Router라고도 할 수 있으며, 웹 페이지를 여는 것과 같은 방식으로 루트를 통해 액티브를 여는 것이지 직접 인터내셔널 Intent 방식으로 점프하는 것이 아니다.이러한 암시적 intent 방법의 점프 장점은 다음과 같습니다.
  • 결합성 저하: 구체적으로 어느 인터페이스를 전환해야 하는지 알 필요가 없고 수요에 따라 약속된 URL 공유 프로토콜에 따라 Intent를 보내면 된다.
  • 더욱 안전하다. Intent 점프를 표시하지 않고 협의에 부합되는 Intent라면 대응하는Activity가 일치하여 나타나지 말아야 할 페이지로 점프를 피한다.
  • 더욱 유연하다: 더욱 광범위한 응용 장면을 가지고 한 장면에서 URL Scheme
  • 를 사용할 수 있다.
  • 서버 하향 점프 경로, 클라이언트는 서버 하향 점프 경로에 따라 상응하는 페이지를 점프
  • H5페이지에서 앵커포인트를 클릭하고 앵커포인트의 구체적인 이동 경로 APP단에 따라 구체적인 페이지를 이동
  • APP 측에서 서버 측에서 보낸 PUSH 알림 표시줄 메시지를 받고 메시지의 클릭에 따라 점프 경로로 관련 페이지를 점프
  • APP는 URL에 따라 다른 APP 지정 페이지로 이동
  • URL Scheme 프로토콜 형식
    위에서 말한 바와 같이 URL Scheme는 웹 페이지를 여는 것과 같은 방식으로 루트를 통해Activity를 열 수 있으며, 프로토콜 형식은 우리가 웹 페이지를 열고 입력한 웹 주소와 유사하다.
    전체 URL Scheme 프로토콜 형식은 scheme, host, port, path 및query로 구성되며 구조는 다음과 같습니다.
    ://:/?
    그 중에서 scheme는 안드로이드에서 흔히 볼 수 있는 프로토콜일 수도 있고 사용자 정의 프로토콜일 수도 있습니다.안드로이드에서 흔히 볼 수 있는 프로토콜은 콘텐츠 프로토콜, http 프로토콜, file 프로토콜 등을 포함한다. 사용자 정의 프로토콜은 사용자 정의 문자열을 사용할 수 있고 우리가 제3자의 응용을 시작할 때 주로 사용자 정의 프로토콜을 사용한다.
    다음은 사용자 지정 프로토콜의 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를 Data 형식으로 Intent에 추가하고, 이 activity를 은밀하게 호출합니다.
    1). 안드로이드 매니페스트에서.xml에서 탭에 설정Scheme 추가
    
         
            
            
        
         
            
            
            
            
            
            
            
            
        
        
            
            
            
        
    
    

    위의 설정에서 보듯이MainActivity는 여러 개의 설정을 포함하고 첫 번째는 정상적인 시작이다. 즉, 응용 목록에서 시작하는 것이다.두 번째는 URL Scheme 방식으로 시작하는데 그 자체도 은식 Intent 호출의 일종이다. 다른 것은 속성을 추가하고 URL Scheme 프로토콜 형식을 u로 정의하는 것이다.rlschemel://auth_activity
    URL Scheme 프로토콜 형식에서 URI를 구성하는 이러한 속성은 태그에서 선택할 수 있지만 다음과 같은 종속성이 있습니다.
  • scheme가 지정되지 않으면 host 파라미터가 무시됩니다
  • host가 지정되지 않으면port 파라미터가 무시됩니다
  • scheme와host가 지정되지 않으면 path 파라미터가 무시됩니다
  • intent 객체의 Uri 매개 변수를 inte-filter의 태그에 지정된 URI 형식과 비교할 때 inte-filter의 태그에 지정된 부분만 비교합니다. 예를 들어,
  • intent-filter에서 scheme만 지정하면 이 sheme를 가진 모든 URI가 intent-filter와 일치합니다.
  • intent-filter에서 scheme와 authority(authority는host와port 두 부분만 포함)만 지정하고 path를 지정하지 않으면 같은 scheme와 authority를 가진 모든 URI가 이 intent-filter와 일치하며 path의 값을 고려하지 않습니다.
  • intent-filter에 scheme, authority, path가 동시에 지정되어 있다면 같은 scheme, authority와 path가 있는 URI만 이 intent-filter와 일치할 수 있습니다.

  • 주의해야 할 것은 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();
      }
    

    물론 웹 페이지에서 호출할 수 있다
    새 응용 프로그램 열기
    

    또는 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 숨기기
    일부 보조적이고 독립된 앱을 Home Launcher에 숨기고 특정한 앱만 호출할 수 있도록 해야 할 때가 있다.이럴 때 URL Scheme 프로토콜을 이용해서 안드로이드 매니페스트를 설정할 수 있습니다.xml에서 탭은 다음과 같습니다
    
        
            
            
            
            
            
            
            
        
    
    

    Home Launcher에 나열된 응용 프로그램 아이콘은 Activity와 함께 충족되어야 하기 때문입니다.

  • 위 구성에는 category와 데이터 제한이 남아있기 때문에 일치하지 않으며 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

    좋은 웹페이지 즐겨찾기