Notice
Recent Posts
Recent Comments
Link
투케이2K
121. (AndroidStudio/android/java) URL SCHEMA (스키마) 사용해 외부 앱 실행 및 QueryParameter 데이터 전송 실시 본문
Android
121. (AndroidStudio/android/java) URL SCHEMA (스키마) 사용해 외부 앱 실행 및 QueryParameter 데이터 전송 실시
투케이2K 2021. 4. 27. 16:46/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
[소스코드 : 접속하는 쪽 - 손님]
//========== [URL 스키마 접속하는 쪽 - 손님] ==========
<JAVA 파일 : 전역 변수 선언>
String packageNames = "kr.co.two2k.manager";
String activityName = "kr.co.two2k.manager.A_UrlSchemaData";
String schemaName = "test_schema";
String hostName = "test_host";
String parameter = "name=kwon&idno=20131575";
<JAVA 파일 : 액티비티명과 패키지명으로 다이렉트 접속>
try {
ComponentName compName = new ComponentName(packageNames,activityName); //TODO 액티비티 지정이동
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
if(parameter != null && parameter.length() > 0){
intent.setData(Uri.parse(schemaName+"://"+hostName+"?"+parameter)); //TODO 데이터 보내기
}
else {
intent.setData(Uri.parse(schemaName+"://"+hostName)); //TODO 일반 호출
}
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(compName); //TODO 액티비티 지정이동
startActivity(intent);
overridePendingTransition(0,0);
}
catch (Exception e){
e.printStackTrace();
}
<JAVA 파일 : 스키마와 호스트명으로 접속>
try {
String url = "";
if(parameter != null && parameter.length() > 0){
url = schemaName+"://"+hostName+"?"+parameter; //TODO 데이터 보내기
}
else {
url = schemaName+"://"+hostName; //TODO 일반 호출
}
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
overridePendingTransition(0,0);
}
catch (Exception e){
e.printStackTrace();
}
[소스코드 : 받는 쪽 - 주인]
//========== [URL 스키마 맞이하는 쪽 - 주인] ==========
<AndroidManifest.xml 파일>
<activity
android:name=".A_UrlSchemaData"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">
<!-- UrlSchema 사용위해 인텐트 필터 등록 -->
<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="test_host"
android:scheme="test_schema"/>
</intent-filter>
</activity>
<JAVA 파일 : A_UrlSchemaData>
//TODO [초기 액티비티 실행 시 URL 스키마로 접속한것 확인]
try {
if(getIntent()!=null){
Uri uri = getIntent().getData();
if(uri != null){
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_UrlSchemaData > UrlSchema 받은 데이터 확인 성공]");
Log.d("","\n"+"[데이터 : "+String.valueOf(uri.toString())+"]");
Log.d("","\n"+"[Query(name) : "+String.valueOf(uri.getQueryParameter("name"))+"]");
Log.d("","\n"+"[Query(idno) : "+String.valueOf(uri.getQueryParameter("idno"))+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
}
else {
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_UrlSchemaData > UrlSchema 받은 데이터 확인 실패]");
Log.d("","\n"+"[데이터 : "+String.valueOf("url 없음")+"]");
Log.e("//===========//","================================================");
Log.d("---","---");
}
}
else {
Log.d("---","---");
Log.e("//===========//","================================================");
Log.d("","\n"+"[A_UrlSchemaData > UrlSchema 받은 데이터 확인 실시]");
Log.d("","\n"+"[데이터 : "+String.valueOf("intent 없음")+"]");
Log.e("//===========//","================================================");
Log.d("---","---");
}
}
catch (Exception e){
e.printStackTrace();
}
/* =========================== */
/* =========================== */
[결과 출력]
[결과 출력 : 접속하는 쪽 - 손님]
[결과 출력 : 받는 쪽 - 주인]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments