본문 바로가기

안드로이드

app version & store version

현재 버전최신버전 가져오기


ex) test 이미지



현재 버전은 build.gradle 파일에서 확인할수 있다.

app

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
applicationId "kr.test"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0" <---현재 버전
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}


최신버전은..플레이스토어의 앱 소개페이지에 버전정보를 확인할수 있는데

아래 코드는 소개페이지에 있는 버전정보를 가져오는 방법이다.


코딩

앱 화면에서 보여줄때 아래와 같이 작성하면 된다.

Setting_Version.java  (소스 일부..)

protected void onViewCreated(View v) {
//현재 버전 가져오기
PackageManager manager = v.getContext().getPackageManager();
PackageInfo info = null;
try {
info = manager.getPackageInfo(
v.getContext().getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
String version = info.versionName;
app_version_current.setText("v"+version);

//최신 버전 가져오기
String store_version = MarketVersionChecker.getMarketVersion(v.getContext().getPackageName());
app_version_new.setText("v"+store_version);

if(store_version.compareTo(version) > 0){
//업데이트 필요
setting_version_bt.setText(R.string.setting_version_new_msg);

//버튼 클릭시 플레이 스토어로 이동

setting_version_bt.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + v.getContext().getPackageName())));
}
});

}else{
//업데이트 불필요
setting_version_bt.setText(R.string.setting_version_current_msg);
}

}


MarketVersionCheker.java (추가)

package kr.test.utils;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
* Created by Administrator on 2016-04-21.
*/
public class MarketVersionChecker {

public static String getMarketVersion(String packageName) {
try {
Document doc = Jsoup.connect(
"https://play.google.com/store/apps/details?id="
+ packageName).get();
Elements Version = doc.select(".content");

for (Element mElement : Version) {
if (mElement.attr("itemprop").equals("softwareVersion")) {
return mElement.text().trim();
}
}

} catch (IOException ex) {
ex.printStackTrace();
}

return null;
}

public static String getMarketVersionFast(String packageName) {
String mData = "", mVer = null;

try {
URL mUrl = new URL("https://play.google.com/store/apps/details?id="
+ packageName);
HttpURLConnection mConnection = (HttpURLConnection) mUrl
.openConnection();

if (mConnection == null)
return null;

mConnection.setConnectTimeout(5000);
mConnection.setUseCaches(false);
mConnection.setDoOutput(true);

if (mConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader mReader = new BufferedReader(
new InputStreamReader(mConnection.getInputStream()));

while (true) {
String line = mReader.readLine();
if (line == null)
break;
mData += line;
}

mReader.close();
}

mConnection.disconnect();

} catch (Exception ex) {
ex.printStackTrace();
return null;
}

String startToken = "softwareVersion\">";
String endToken = "<";
int index = mData.indexOf(startToken);

if (index == -1) {
mVer = null;

} else {
mVer = mData.substring(index + startToken.length(), index
+ startToken.length() + 100);
mVer = mVer.substring(0, mVer.indexOf(endToken)).trim();
}

return mVer;
}
}


위파일을 추가하면 Jsoup 라는게 있는데 Jsoup 라이브러리가 추가가 안되어있어서 클래스파일을 못찾는다고 나올것이다.

Jsoup 안드로이드에서 웹사이트를 파싱하여 원하는 데이터를 읽어들일 수 있도록 도와주는 api이다.

사용방법은 Jsoup 라이브러리를 추가하면 된다.

build.gradle

 dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'org.jsoup:jsoup:1.8.3' <--추가하고 빌드한다.

}


아..하다가 에러가 나왔었는데

android.os.NetworkOnMainThreadException


검색해보니 특정 URL의 웹페이지를 InputStreamReader로 읽어오려고 한부분에서 Exception이 발생하였을때 나왔다고한다..!!!

아래와 같이 추가해주면 해결된다.

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

Setting_Version.java

protected void onViewCreated(View v) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
//현재 버전 가져오기
PackageManager manager = v.getContext().getPackageManager();
PackageInfo info = null;
    .....


에러 참고 사이트

http://blog.naver.com/since201109/150169407558