내 앱의 버전정보와 Market에 등록된 최신 버전을 비교하여 업데이트가 필요하다면 사용자에게 업데이트를 요청할 수 있습니다. 이런 경우, 내 앱의 설치화면 화면을 띄워 사용자가 설치할 수 있도록 기능을 제공해야 합니다.
Intent의 Uri에 pack name을 제공하여 PlayStore의 설치 화면을 실행하도록 구현할 수 있습니다. 예제와 함께 어떻게 구현하는지 알아보겠습니다.
App 설치 화면으로 이동
다음과 같이 Intent를 만들고 실행하면 Uri의 데이터로 설정된 앱의 설치화면으로 이동합니다.
설치하고 싶은 package name을 market://details?id=
다음에 입력하면 됩니다.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("market://details?id=jp.naver.line.android"));
startActivity(intent);
PlayStore의 AndroidManifest.xml를 보면 다음과 같이 IntentFilter를 정의하였기 때문에 위의 Intent를 실행하면 앱 정보 및 설치 화면을 보여주는 액티비티를 실행할 수 있습니다.
<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="market" android:host="details"/>
</intent-filter>
위 코드를 실행해보면 다음과 같은 Chooser Activity가 나올 수 있습니다.
이 디바이스에서 Chooser Activiviy가 실행된 이유는, 3개의 Market app이 설치되어있기 때문입니다.
PlayStore앱을 선택하고 실행하면 다음과 같은 설치 화면이 나옵니다.
만약 Market app이 PlayStore뿐이라면, 바로 설치화면이 실행됩니다.
PlayStore 웹사이트에서 Line 앱 페이지의 주소는
https://play.google.com/store/apps/details?id=jp.naver.line.android
입니다. 다른 앱의 경우...details?id=[package name]
에서 package name을 변경하면 됩니다.
내 앱의 설치 화면으로 이동
만약 실행 중인 앱이 최신버전이 아니라면, 사용자에게 업데이트를 요청할 수도 있습니다.
Activity에서 getPackageName()
으로 내 앱의 package name을 얻을 수 있습니다.
다음처럼 입력하면 내 앱의 설치 화면으로 이동합니다.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("market://details?id=" + getPackageName()));
startActivity(intent);
내 앱의 버전 정보 가져오기
다음과 같이 내 앱의 정보를 가져오면 version name과 version code를 알 수 있습니다.
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
String curVersion = packageInfo.versionName;
Log.d(TAG, "Version name: " + packageInfo.versionName
+ ", Version code: " + packageInfo.versionCode);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
결과
04-19 17:28:25.706 9540 9540 D MainActivity: Version name: 1.0, Version code: 1
PlayStore에 등록된 최신 앱 버전 확인
PlayStore에 등록된 최신버전을 확인하는 방법 중에 하나는 웹사이트에서 버전 정보를 파싱하는 방법입니다.
stackoverflow에 버전 정보를 파싱하는 코드가 있어서 소개해드립니다.
먼저 gradle에 다음과 같이 의존성을 추가해야 합니다.
dependencies {
...
implementation 'org.jsoup:jsoup:1.8.3'
}
다음 코드는 버전 정보를 파싱하는 클래스입니다. 앱의 Main thread에서 파싱을 할 수 없어서 AsyncTask에서 파싱하도록 구현하였습니다.
public class VersionCheckTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... strings) {
String newVersion = null;
String packageName = strings[0];
try {
Document document = Jsoup.connect("https://play.google.com/store/apps/details?id="
+ packageName + "&hl=en")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get();
if (document != null) {
Elements element = document.getElementsContainingOwnText("Current Version");
for (Element ele : element) {
if (ele.siblingElements() != null) {
Elements sibElemets = ele.siblingElements();
for (Element sibElemet : sibElemets) {
newVersion = sibElemet.text();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
protected void onPostExecute(String version) {
Log.d("VersionCheckTask", "new version: " + version);
}
}
다음 코드는 위의 클래스를 이용하여 인자로 전달된 package name의 버전정보를 가져오는 코드입니다.
VersionCheckTask task = new VersionCheckTask();
task.execute("com.kakao.talk");
실행해 보면 다음과 같이 버전정보를 로그로 출력합니다.
04-19 17:20:54.944 9349 9394 D VersionCheckTask: packageName: com.kakao.talk
04-19 17:20:55.819 9349 9349 D VersionCheckTask: new version: 8.8.1
참고
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력