단축URL을 생성하는 안드로이드 앱 만들기2




단축URL을 클립보드로 복사하기 및 커스텀 버튼 넣기

이전 글에 이어서 단축 URL을 생성하는 안드로이드 앱을 계속해서 설명하겠습니다.
이전 글에서는 네이버 API를 등록하고 retrofit을 사용해서 네트워크 요청하는 방법을 설명했습니다.

이번 포스트에서는 네이버 API를 이용하여 생성한 단축 URL을 클립보드로 복사하거나 다른 앱으로 공유되도록 구현해 보겠습니다.

생성된 단축 URL을 Intent를 사용하면 아래 사진처럼 안드로이드가 사용 가능한 앱 리스트를 보여줍니다.
구현된 화면에서는 Bottom Sheets 뷰로 앱 리스트가 노출되고 있습니다.
이는 안드로이드가 기본적으로 Intent를 요청했을 때 노출되는 화면이기 때문에 낮은 OS 버전이거나 다른 테마를 사용하는 경우 다르게 나올 수 있습니다.

커스텀 기능 및 앱 공유 리스트

첫 번째 항목에 '복사하기'는 개발자가 직접 추가한 버튼입니다.
Intent.ACTION_SEND로 URL을 보내면 URL을 실행할 수 있는 모든 앱 리스트를 보여줍니다.
이 리스트 영역에 개발자가 원하는 앱 버튼을 추가할 수 있습니다.

복사하기 버튼을 첫 번째에 위치시키고 클릭하면 단축 URL을 클립보드로 복사한 다음 토스트(Toast) 메시지가 노출되도록 구현했습니다.



공유 인텐트 만들기

Intent를 생성하여 안드로이드에게 URL Text를 공유할 수 있는 앱 리스트를 요청합니다.

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, url);

Intent.ACTION_SEND로 액션을 설정하고 text/plain으로 타입을 설정합니다.
그리고 Intent.EXTRA_TEXT에 원본 URL을 추가합니다.

사용가능한 앱 리스트 호출하기

Intent.createChooser()를 사용하여 앱 리스트를 보여주고 선택할 수 있습니다.
createChooser()를 할 때 타이틀을 지정할 수 있습니다.
여기에서는 "공유 http://example.shoturl.com"처럼 생성된 단축URL를 타이틀로 노출합니다.
그리고 위에서 만든 공유 인텐트를 chooser에 넣으면 위에서 설정한 text/plain을 공유할 수 있는 앱 리스트가 노출됩니다.

String title = "공유 " + url;
Intent chooserIntent = Intent.createChooser(shareIntent, title);

Chooser에 커스텀 버튼 추가하기

chooser에 커스텀 버튼을 추가하기 위해 투명한 Activity를 생성합니다.
이 Activity는 chooser에 버튼 이름, 버튼 이미지를 설정하는 역할을 하고 클릭했을 때 클립보드로 복사하고 토스트 메시지를 노출합니다.


메니페스트의 속성으로 icon과 label을 설정하면 chooser의 버튼 이름과 이미지가 메니페스트에 설정된 것으로 노출합니다.
theme는 Theme.NoDisplay로 설정하여 호출됬을 때 엑티비티를 투명하게 해서 배경이 보이지 않도록 하여 토스트 메시지만 노출되는 것처럼 보이게 합니다.

단축 URL을 클립보드로 복사하고 토스트 메시지 노출하기

chooser의 복사하기 버튼을 클릭하면 Activity를 호출하는 인텐트를 생성합니다.

Intent clipboardIntent = new Intent(context, CopyToClipboardActivity.class);
clipboardIntent.setData(Uri.parse(url));

CopyToClipboardActivity.class로 실행할 Activity를 설정하고 data에 단축 URL 문자열을 추가합니다.
그러면 chooser에서 복사하기를 클릭했을 때 Activity가 실행됩니다. 그리고 CopyToClipboardActivity 에서는 getIntent().getData() 단축 URL 문자열을 얻을 수 있습니다.


위 코드처럼 CopyToClipboardActivity가 호출되면 getData()로 인텐트에서 url을 얻을 수 있습니다.
copyTextToClipboard() 에서 CLIPBOARD_SERVICE를 불러와 단축 URL을 ClipboardManager를 사용해서 클립보드로 복사합니다.
그리고 Toast.makeText().show()로 "복사되었습니다."를 호출합니다.
그 후에 finish()를 호출해서 엑티비티를 바로 종료하여 토스트 메시지만 보이는 것처럼 효과를 줄 수 있습니다.

Chooser 앱 리스트에 앞에 CopyToClipboardActivity 노출하기

chooser 앱 리스트에 Activity를 노출하고 클릭할 때 호출되도록 chooser와 CopyToClipboardActivity를 연동해야 합니다.

Intent chooserIntent = Intent.createChooser(shareIntent, title);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { clipboardIntent });
startActivity(chooserIntent);

Intent.EXTRA_INITIAL_INTENTS으로 CopyToClipboardActivity 인텐트(shareIntent)를 추가합니다.
Intent.EXTRA_INITIAL_INTENTS는 chooser의 리스트 첫번째에 위치하도록 정렬해 줍니다.
위에서 메니페스트로 Activity를 등록했고 명시적으로 CopyToClipboardActivity.class 인텐트를 등록했기때문에 chooser 리스트에 CopyToClipboardActivity를 맨 앞에 노출할 수 있습니다.
그리고 클릭했을 때 clipboardIntent가 실행되어 CopyToClipboardActivity를 실행할 수 있습니다.

마무리

네이버 API와 retrofit 라이브러리를 사용하여 단축 URL을 생성하고 Intent로 공유할 앱 리스트를 노출하거나 클립보드와 토스트 메시지를 노출하는 커스텀 기능을 구현한 간단한 앱을 만들어 보았습니다.

개인적으로 간단한 앱을 만들어보면서 안드로이드를 공부하고 있습니다.
부족한 부분을 공유해 주거나 잘못된 정보가 있는 경우 알려주시면 수정하거나 추가하도록 하겠습니다.

예제 코드

단축 URL 앱 전체 코드는 github에 올렸습니다.
zerogdev 로 검색하거나 아래 링크를 클릭하여 github repository에서 전체 소스를 참고할 수 있습니다.



단축 URL 앱은 구글플레이에서도 다운받을 수 있습니다.
Get it on Google Play

댓글

이 블로그의 인기 게시물

코틀린 (Kotlin) filter, map, all, any, count, find, groupBy, flatMap 함수 정리

코틀린 (Kotlin) 인터페이스 정리

RecyclerView 에서 notifyItemChanged()의 payload 이해하기