내 앱의 버전정보와 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
참고
Recommended Posts:
- AIDEGen으로 IDE에서 Android Framework 개발
- Android - adb shell input 명령어 사용 방법
- Android - App VersionCode, VersionName 등 설치 정보 확인
- Android - Call Stack 출력하는 방법
- Android 앱의 SQLite DB 테이블 확인
- Java 코드를 DEX로 변환, 안드로이드 디바이스에서 실행
- Android - adb로 실행 중인 프로세스, 쓰레드 리스트 & 메모리 정보 확인
- Android - 파일의 MimeType(확장자) 가져오는 방법
- Mockito cannot mock/spy final class 에러 해결 방법
- Android Studio에서 Google Test로 C++ unit 테스트 작성
- Android - Native(C++)에서 Call stack 출력하는 방법
- Android Emulator에서 adb remount 하는 방법 (Writable)
- 안드로이드 스튜디오, custom framework.jar로 빌드하기