현재 버전과 최신버전 가져오기
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