안드로이드 브라우저에서 사용자 정의 안드로이드 응용 프로그램을 실행
안드로이드 브라우저에서 내 안드로이드 응용 프로그램을 시작하는 방법에 관해 아무도 나를 안내 할 수 있습니까?
<intent-filter>
와 함께 <data>
요소를 사용하십시오 . 예를 들어, twitter.com에 대한 모든 링크를 처리하려면 다음에 이것을 안에 넣으 <activity>
십시오 AndroidManifest.xml
.
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
그런 다음 사용자가 브라우저에서 Twitter 링크를 클릭하면 작업을 완료하기 위해 사용할 응용 프로그램 (브라우저 또는 응용 프로그램)이 표시됩니다.
물론 웹 사이트와 앱을 긴밀하게 통합하려는 경우 고유 한 체계를 정의 할 수 있습니다.
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
그런 다음 웹 앱에서 다음과 같은 링크를 넣을 수 있습니다.
<a href="my.special.scheme://other/parameters/here">
사용자가 클릭하면 앱이 자동으로 시작됩니다 (아마도 my.special.scheme://
uri 유형을 처리 할 수있는 유일한 앱이기 때문에 ). 이것의 유일한 단점은 사용자가 앱을 설치하지 않으면 심한 오류가 발생한다는 것입니다. 확인할 방법이 있는지 잘 모르겠습니다.
편집 : 질문에 대답하기 getIntent().getData()
위해 Uri
객체 를 반환하는 것을 사용할 수 있습니다 . 그런 다음 Uri.*
메소드를 사용하여 필요한 데이터를 추출 할 수 있습니다 . 예를 들어 사용자가 다음 링크를 클릭했다고 가정 해 보겠습니다 http://twitter.com/status/1234
.
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
의 어느 곳에서나 위의 작업을 수행 할 수 Activity
있지만에서 할 수도 있습니다 onCreate()
. params.size()
에서 경로 세그먼트 수를 얻는 데 사용할 수도 있습니다 Uri
. Uri
특정 부분을 추출하는 데 사용할 수있는 다른 방법 은 javadoc 또는 Android 개발자 웹 사이트를 참조하십시오 .
CHROME
2014 년 1 월 28 일 현재 위의 모든 답변이 작동하지 않았습니다.
내 앱은 행 아웃, Gmail 등의 앱의 http://example.com/someresource/ 링크에서 제대로 시작 되었지만 크롬 브라우저에는 없습니다.
이 문제를 해결하려면 CHROME에서 올바르게 시작되도록 인 텐트 필터를 다음과 같이 설정해야합니다
<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:host="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
pathPrefix
요소에 주목
사용자가 Google 검색 결과 또는 다른 웹 사이트의 링크를 클릭하여 Chrome 브라우저에서 http://example.com/someresource/ 패턴을 요청할 때마다 앱이 활동 선택기 내에 나타납니다.
여기 내 의견을 참조하십시오 : Android 브라우저에서 링크를 작성하여 앱을 시작합니까?
새로운 인터넷 방식을 정의하지 않는 한 사람들이 자신의 방식을 사용하지 않는 것이 좋습니다.
내 경우에는 두 가지 범주를 설정해야했고 효과가있었습니다 <intent-filter>
.
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
예를 들어 다음과 같은 것이 있습니다.
앱을 여는 링크 : http://example.com
앱의 패키지 이름 : com.example.mypackage
그런 다음 다음을 수행해야합니다.
1) 활동에 인 텐트 필터를 추가하십시오 (원하는 활동이 될 수 있습니다. 자세한 정보는 문서를 확인하십시오 ).
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) 링크를 테스트 하거나이 방법을 사용할 HTML 파일을 작성하십시오 .
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) 모바일 Chrome을 사용하여 테스트
4) 끝입니다.
딥 링크를 테스트하기 위해 시장에 앱을 게시 할 필요는 없습니다 =)
또한 자세한 내용은 설명서 및 유용한 프레젠테이션을 확인하십시오 .
도해야 <category android:name="android.intent.category.BROWSABLE"/>
링크에서 올바르게 인식 활동을 확인하기 위해 텐트 필터에 추가됩니다.
다음 링크는 브라우저에서 직접 앱을 설치 (설치된 경우)하는 방법에 대한 정보를 제공합니다. 그렇지 않으면 플레이 스토어에서 앱을 직접 열어 사용자가 원활하게 다운로드 할 수 있습니다.
https://developer.chrome.com/multidevice/android/intents
이 기능을 구현할 때 안드로이드 런처에서 아이콘이 사라지면 인 텐트 필터를 분할 해야하는 것보다 유의하십시오.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="your-own-uri" />
</intent-filter>
</activity>
예, Chrome은 체계를 찾는 대신 검색합니다. URI 스킴을 통해 앱을 시작하려면 Play 스토어에서이 멋진 유틸리티 앱을 사용하십시오. 그것은 내 하루를 저장 :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Felix 의 Xamarin 포트 답변
에 MainActivity
( docs : Android.App.IntentFilterAttribute 클래스 )를 추가하십시오 .
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin은 다음을 추가 AndroidManifest.xml
합니다.
<activity android:label="Something" android:screenOrientation="portrait" android:theme="@style/MyTheme" android:name="blahblahblah.MainActivity">
<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="my.special.scheme" />
</intent-filter>
</activity>
그리고 매개 변수를 얻으려면 ( OnAct of MainActivity에서 테스트 ) :
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
내가 아는 한 위의 내용은 MainActivity뿐만 아니라 모든 활동에 추가 할 수 있습니다
노트:
- 링크를 사용자가 클릭은 안드로이드 OS 앱 다시 시작하는 경우 (죽 이전 인스턴스 (있는 경우)를, 새로운 하나를 실행) 의 의미
OnCreate
응용 프로그램의의 이벤트가MainLauncher Activity
다시 발사됩니다. - 이 링크를 사용하면
<a href="my.special.scheme://host/arg1/arg2">
위의 마지막 코드 조각 값은 다음과 같습니다.
scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
딥 링크 처리에 대한 Felix의 접근 방식은 딥 링크 처리에 대한 일반적인 접근 방식입니다. 또한 딥 링크의 라우팅 및 파싱을 처리하기 위해이 라이브러리를 확인하는 것이 좋습니다.
https://github.com/airbnb/DeepLinkDispatch
주석을 사용하여 특정 딥 링크 URI에 대한 활동을 등록 할 수 있으며 경로 세그먼트 가져 오기, 일치 등의 일반적인 규칙을 수행하지 않고도 매개 변수를 추출합니다. 간단히 주석을 달고 이와 같은 활동을 수행 할 수 있습니다. :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
이봐, 나는 해결책을 얻었다. 카테고리를 "기본"으로 설정하지 않았습니다. 또한 의도 데이터에 Main 활동을 사용하고있었습니다. 이제 의도 데이터에 다른 활동을 사용하고 있습니다. 도와 주셔서 감사합니다. :)
CALLBACK_URL에 의사 호스트 이름을 추가해야합니다. 'app : //'는 URL로 이해되지 않으며 구문 분석 할 수 없습니다.
example.php :
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
@JRuns 답변을 여기 에서 찾으 십시오 . 아이디어는 사용자 정의 구성표로 HTML을 작성하고 어딘가에 업로드하는 것입니다. 그런 다음 html 파일에서 사용자 정의 링크를 클릭하면 앱으로 리디렉션됩니다. 나는 이 기사를 안드로이드에 사용했다. 그러나 이름 Name = "MyApp.Mobile.Droid.MainActivity"
활동을 대상 활동 에 설정하는 것을 잊지 마십시오.
2019 년 6 월 15 일 기준
내가 한 것은 URL을 열 수있는 네 가지 가능성을 모두 포함하는 것입니다.
즉, 접두사 가 있는 http
/ https
및 2가 www
있고없는 경우 2www
이 기능을 사용하면 브라우저 및 기타 옵션을 선택하지 않아도 앱이 자동으로 시작됩니다.
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="example.in" />
<data android:scheme="https" android:host="www.example.in" />
<data android:scheme="http" android:host="example.in" />
<data android:scheme="http" android:host="www.example.in" />
</intent-filter>
참고 URL : https://stackoverflow.com/questions/2958701/launch-custom-android-application-from-android-browser
'Programming' 카테고리의 다른 글
Chrome에서 JavaScript 디버거를 어떻게 시작합니까? (0) | 2020.02.21 |
---|---|
jQuery를 사용하여 양식 입력 필드를 얻습니까? (0) | 2020.02.21 |
Windows에서 서비스를 어떻게 삭제합니까? (0) | 2020.02.21 |
배치가 있지만 아직 존재하지 않는 경우에만 폴더를 만듭니다. (0) | 2020.02.21 |
Node.js에서 파일을 자동으로 다시로드하는 방법? (0) | 2020.02.21 |