밑에와 같은 소스를 만들어서 app-release.apk로 만들었는데 오류가 나네요ㅠㅠ
디버그 모드일때는 오류가 안나는데.... 왜 이러는 걸까요??
app.build.gradle
jsoup 라이브어리 호출
dependencies {
compile 'org.jsoup:jsoup:1.8.3'
}
MarketVersionChecker.java
패키지명의 구글플레이 앱 소개 페이지에서 버전 정보를 가져와서 String으로 리턴한다.
import android.util.Log;
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;
public class MarketVersionChecker {
public static String getMarketVersion(String packageName) {
Log.d("받은 값", packageName);
try {
Document document = Jsoup.connect("
https://play.google.com/store/apps/details?id=" + packageName).get();
Elements Version = document.select(".content");
for (Element element : Version) {
if (element.attr("itemprop").equals("softwareVersion")) {
return element.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 bufferedReader = new BufferedReader(new InputStreamReader(mConnection.getInputStream()));
while(true) {
String line = bufferedReader.readLine();
if (line == null)
break;
mData += line;
}
bufferedReader.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;
}
}
MainActivity.java
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import java.lang.ref.WeakReference;
public class MainActivity extends AppCompatActivity {
String deviceVersion;
String storeVersion;
private BackgroundThread mBackgroundThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBackgroundThread = new BackgroundThread();
mBackgroundThread.start();
}
public class BackgroundThread extends Thread {
@Override
public void run() {
// 패키지 네임 전달
String storeVersion = MarketVersionChecker.getMarketVersion(getPackageName());
// 디바이스 버전 가져옴
try {
deviceVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
deviceVersionCheckHandler.sendMessage(deviceVersionCheckHandler.obtainMessage());
// 핸들러로 메세지 전달
}
}
private final DeviceVersionCheckHandler deviceVersionCheckHandler = new DeviceVersionCheckHandler(this);
// 핸들러 객체 만들기
private static class DeviceVersionCheckHandler extends Handler{
private final WeakReference<MainActivity> mainActivityWeakReference;
public DeviceVersionCheckHandler(MainActivity mainActivity) {
mainActivityWeakReference = new WeakReference<MainActivity>(mainActivity);
}
@Override
public void handleMessage(Message msg) {
MainActivity activity = mainActivityWeakReference.get();
if (activity != null) {
activity.handleMessage(msg);
// 핸들메세지로 결과값 전달
}
}
}
private void handleMessage(Message msg) {
//핸들러에서 넘어온 값 체크
if (storeVersion.compareTo(deviceVersion) > 0) {
// 업데이트 필요
AlertDialog.Builder alertDialogBuilder =
new AlertDialog.Builder(new ContextThemeWrapper(this, android.R.style.Theme_DeviceDefault_Light));
alertDialogBuilder.setTitle("업데이트");alertDialogBuilder
.setMessage("새로운 버전이 있습니다.\n보다 나은 사용을 위해 업데이트 해 주세요.")
.setPositiveButton("업데이트 바로가기", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 구글플레이 업데이트 링크
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.setCanceledOnTouchOutside(true);
alertDialog.show();
} else {
// 업데이트 불필요
}
}
}
출처:
http://gun0912.tistory.com/8
http://dexx.tistory.com/124