문제

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

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

내 자신의 신청서 또는 서비스로 처리해야합니다. 계획은 "myapp" 그리고 아닙니다 "http", 또는 "ftp". 그것이 바로 내가 의도 한 바입니다. Android OS에 대한 전 세계적으로 내 자신의 URI 스키마를 정의하는 것입니다. 이게 가능해?

이것은 일부 프로그램과 같은 일부 프로그램과 같은 Windows 시스템 (예 : Skype)과 다소 유사합니다.skype://) 또는 모든 토런트 다운로더 프로그램 (torrent://).

도움이 되었습니까?

해결책

이것은 매우 가능합니다. 당신은 당신의 AndroidManifest.xml에서 URI 체계를 <data> 요소. 당신은 의도 필터를 설정합니다 <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>

암시 적 의도가 어떻게 작동하는지에 따라 적어도 하나의 행동과 하나의 범주를 정의해야합니다. 여기서 나는 행동으로보기를 선택했고 (무엇이든 할 수는 있지만) 기본 범주를 추가해야했습니다 (모든 암시 적 의도에 필요하므로). 또한 카테고리 브라우즈 가능성을 추가하는 방법에 주목하십시오. 이것은 필요하지 않지만 브라우저에서 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 {
  ...
}

플러스로 쿼리 매개 변수도 활동에 전달됩니다.

몇 년 전에 질문이 제기되고 Android는이 URI 계획에서 많이 진화합니다.
원래 URI 체계에서 Deep Link 및 이제 Android 앱 링크에 이르기까지.

Android는 이제 자신의 URI 체계를 정의하지 않고 HTTP URL을 사용하는 것이 좋습니다. Android 앱 링크는 자신이 소유 한 웹 사이트 도메인에 링크 된 HTTP URL을 사용하므로 다른 앱은 링크를 사용할 수 없습니다. Deep Link 및 Android 앱 링크의 비교를 확인할 수 있습니다. 여기

이제 Android Studio 옵션 : Tools> App Links Assistant를 사용하여 URI 체계를 쉽게 추가 할 수 있습니다. Android 문서의 세부 사항을 참조하십시오. https://developer.android.com/studio/write/app-link-indexing.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top