- 문법:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- 포함된 위치:
-
<intent-filter>
- 포함 가능한 요소:
-
<data>
- 설명:
-
URI 쿼리 매개변수와 URI 프래그먼트를 포함할 수 있는 정확한
Intent
일치 규칙을 만듭니다. 규칙은android:allow
속성에 따라 포함 (허용) 규칙 또는 제외 (차단) 규칙일 수 있습니다. 일치 규칙은 포함된<data>
요소의path*
,fragment*
,query*
속성으로 지정됩니다.일치
URI와 일치하려면 URI 상대 필터 그룹의 각 부분이 URI의 일부와 일치해야 합니다. URI 상대 필터 그룹에 지정되지 않은 URI 부분이 있을 수 있습니다. 예를 들면 다음과 같습니다.
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param1=value1" /> <data android:query="param2=value2" /> </uri-relative-filter-group> ... </intent-filter>
URI 상대 필터 그룹에서 지정한 모든 항목이 있으므로 필터가
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3
과 일치합니다. 쿼리 매개변수의 순서는 중요하지 않으므로 필터는https://project.example.com/any/path/here?param2=value2¶m1=value1
와도 일치합니다. 하지만 필터는param2=value2
가 누락된https://project.example.com/any/path/here?param1=value1
와 일치하지 않습니다.OR 및 AND
<uri-relative-filter-group>
외부의<data>
태그는 OR 연산을 적용하고<uri-relative-filter-group>
내부의<data>
태그는 AND 연산을 적용합니다.다음 예를 참고하세요.
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
이 필터는
/prefix
로 시작하거나suffix
로 끝나는 경로와 일치합니다.반면 다음 예에서는
/prefix
로 시작하고suffix
로 끝나는 경로와 일치합니다.<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> </uri-relative-filter-group> ... </intent-filter>
따라서 동일한
<uri-relative-filter-group>
에 있는 여러path
속성이 아무것도 일치시키지 않습니다.<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:path="/path1" /> <data android:path="/path2" /> </uri-relative-filter-group> ... </intent-filter>
선언 순서
다음 예를 참고하세요.
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:fragment="fragment" /> </uri-relative-filter-group> <uri-relative-filter-group android:allow="false"> <data android:fragmentPrefix="fragment" /> </uri-relative-filter-group> ... </intent-filter>
제외 규칙이 평가되기 전에 일치 항목이 발견되어 필터가
#fragment
프래그먼트와 일치하지만#fragment123
와 같은 프래그먼트는 일치하지 않습니다.상위 태그
<uri-relative-filter-group>
태그는 상위<data>
태그(<uri-relative-filter-group>
외부이지만 동일한<intent-filter>
내부에 있는<data>
태그)와 함께 작동합니다. URI 속성은<intent-filter>
수준에서 상호 종속적이므로<uri-relative-filter-group>
태그가 제대로 작동하려면 상위<data>
태그가 있어야 합니다.<intent-filter>
의<data>
하위 요소는<uri-relative-filter-group>
태그보다 먼저 평가됩니다. 그런 다음<uri-relative-filter-group>
태그가 순서대로 평가됩니다. 예를 들면 다음과 같습니다.<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="false"> <data android:path="/path" /> <data android:query="query" /> </uri-relative-filter-group> <data android:path="/path" /> ... </intent-filter>
필터는
<uri-relative-filter-group>
제외 규칙에 해당하지 않는<data android:path="/path" />
과 일치하므로https://project.example.com/path?query
을 허용합니다.일반적인 사용 사례
쿼리 매개변수의 유무 또는 값에 따라
Intent
에 일치시키려는 URIhttps://project.example.com/path
가 있다고 가정해 보겠습니다.https://project.example.com/path
과 일치하고https://project.example.com/path?query
을 차단하는 인텐트 필터를 만들려면 다음과 같이 시도해 보세요.<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> </uri-relative-filter-group> ... </intent-filter>
하지만 실제로는 작동하지 않습니다.
https://project.example.com/path?query
URI는 경로/path
와 일치하며<uri-relative-filter-group>
태그는 일치할 때 추가 부분을 허용합니다.다음과 같이 인텐트 필터를 수정합니다.
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="false"> <data android:path="/path" /> <data android:queryAdvancedPattern=".+" /> </uri-relative-filter-group> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> </uri-relative-filter-group> ... </intent-filter>
이 필터는 비어 있지 않은 쿼리 매개변수를 금지하는 차단 규칙이 먼저 평가되기 때문에 작동합니다.
코드를 단순화하려면 쿼리 매개변수를 허용하고 쿼리 매개변수가 없는 URI를 차단하도록 동작을 전환합니다.
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> <data android:queryAdvancedPattern=".+" /> </uri-relative-filter-group> ... </intent-filter>
URI 인코딩된 문자
URI 인코딩 문자가 포함된 URI를 일치시키려면 필터에 인코딩되지 않은 원시 문자를 작성합니다(예:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param=value!" /> </uri-relative-filter-group> ... </intent-filter>
필터는
?param=value!
및?param=value%21
와 일치합니다.하지만 다음과 같이 필터에 인코딩된 문자를 작성하면
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param=value%21" /> </uri-relative-filter-group> ... </intent-filter>
필터가
?param=value!
또는?param=value%21
와 일치하지 않습니다.요소 수
<intent-filter>
내부에<uri-relative-filter-group>
요소를 원하는 수만큼 배치할 수 있습니다.추가 리소스
인텐트 객체와 필터의 일치 방식에 적용되는 규칙을 포함하여 인텐트 필터의 작동 방식에 관한 자세한 내용은 인텐트 및 인텐트 필터와 인텐트 필터를 참고하세요.
<uri-relative-filter-group>
에 관한 자세한 내용은UriRelativeFilterGroup
및UriRelativeFilter
를 참고하세요. - 속성:
- 도입 수준:
- API 수준 35
- 참고 항목:
-
<intent-filter>
<data>
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2024-12-02(UTC)
[null,null,["최종 업데이트: 2024-12-02(UTC)"],[],[]]