Android에서 자체 URI 체계를 구현하는 방법 그것은 정확히 내가 의도 한

다음과 같은 URI를 정의하고 싶다고 가정 해보십시오.

myapp://path/to/what/i/want?d=This%20is%20a%20test

내 자신의 응용 프로그램 또는 서비스에서 처리해야합니다. 계획임을 주목 "myapp"하지 "http", 나 "ftp". 그것은 정확히 내가 의도 한 것입니다 : Android OS에 대해 내 자신의 URI 스키마를 전역 적으로 정의합니다. 이게 가능해?

이는 Skype ( skype://) 또는 토렌트 다운로더 프로그램 ( torrent://) 과 같은 Windows 시스템과 같은 일부 프로그램에서 이미 수행 한 작업과 다소 유사합니다 .



답변

이것은 매우 가능합니다. <data>요소를 사용하여 AndroidManifest.xml에 URI 스킴을 정의하십시오 . <data>요소가 채워진 인 텐트 필터를 설정하면 고유 한 구성표를 만들 수 있습니다. ( 의도 필터 및 의도 해결에 대한 자세한 내용은 여기를 참조하십시오 .)

다음은 간단한 예입니다.

<activity android:name=".MyUriActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="myapp" android:host="path" />
    </intent-filter>
</activity>

암시 적 의도의 작동 방식에 따라 하나 이상의 작업과 범주도 정의해야합니다. 여기에서 VIEW를 조치로 선택하고 (아무것이든 가능하지만) DEFAULT 카테고리를 추가하십시오 (모든 암시 적 의도에 필요하므로). 또한 BROWSABLE 카테고리를 추가 한 방법에 주목하십시오-이것은 필수는 아니지만 브라우저에서 URI를 열 수 있습니다 (멋진 기능).


답변

@DanielLew 답변을 보완하여 매개 변수의 값을 얻으려면 다음을 수행하십시오.

URI 예 : myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

당신의 활동에서 :

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  String valueOne = uri.getQueryParameter("keyOne");
  String valueTwo = uri.getQueryParameter("keyTwo");
}

답변

자신의 계획을 정의하지 않는 것이 좋습니다. 이는 URI 스킴에 대한 웹 표준에 위배되며, 이는 다른 엔티티 간의 이름 충돌을 피하기 위해 적절한 이유로 해당 이름을 엄격하게 제어하려고 시도합니다. 웹 사이트에 구성표에 대한 링크를 넣으면 전체 인터넷 네임 스페이스 전체에 작은 이름을 넣었으므로 해당 표준을 따라야합니다.

자신의 앱에 대한 링크를 원할 경우 여기에 설명 된 접근 방식을 따르는 것이 좋습니다.

Android OS의 브라우저에서 URL을 호출하여 프로그램에 액세스하기 위해 일부 URL 네임 스페이스 (myapp : //app.start/)를 등록하는 방법은 무엇입니까?


답변

Diego의 또 다른 대안은 라이브러리를 사용하는 것입니다.

https://github.com/airbnb/DeepLinkDispatch

처리하려는 URI 및 활동에 대한 주석을 통해 추출하려는 매개 변수를 다음과 같이 쉽게 선언 할 수 있습니다.

@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
  ...
}

또한 쿼리 매개 변수도 활동에 전달됩니다.


답변

몇 년 전에 질문이 제기 되었으므로이 URI 체계에서 Android가 많이 발전했습니다.
원래 URI 스킴에서 딥 링크 및 이제 Android 앱 링크까지.

이제 Android는 고유 한 URI 체계를 정의하지 않고 HTTP URL을 사용하는 것이 좋습니다. Android 앱 링크는 소유 한 웹 사이트 도메인으로 연결되는 HTTP URL을 사용하므로 다른 앱에서는 링크를 사용할 수 없습니다. 여기 에서 딥 링크와 안드로이드 앱 링크의 비교를 확인할 수 있습니다

이제 Android Studio 옵션 (도구> 앱 링크 도우미)을 사용하여 URI 스킴을 쉽게 추가 할 수 있습니다. 자세한 내용은 Android 문서를 참조하십시오 : https://developer.android.com/studio/write/app-link-indexing.html


답변