현재 버전 과 최신버전 가져오기
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
공유하기
URL 복사 카카오톡 공유 페이스북 공유 엑스 공유