GetAppInfo 클래스에서는 넘겨받은 패키지명을 가지고 Play 스토어의 해당 페이지로 가서 앱 이름과 버전에 해당하는 element의 값을 Jsoup 라이브러리를 이용해서 구하게 됩니다.
public class GetAppInfo extends AsyncTask<Void, String, Boolean> {
private String appPackageName;
private String appName;
private String appVersion;
public GetAppInfo(String packageName) {
appPackageName = packageName;
}
@Override
protected Boolean doInBackground(Void... strings) {
Elements elementsAppName;
Elements elementsAppVersion;
boolean result = false;
try {
String AppFromPlayStore = "https://play.google.com/store/apps/details?id=" + appPackageName;
Document doc = Jsoup.connect(AppFromPlayStore).get();
elementsAppName = doc.select("div > div.sIskre > c-wiz:nth-child(1) > h1 > span");
if (elementsAppName.size() != 0) {
appName = elementsAppName.text();
} else {
elementsAppName = doc.select("div > div.sIskre > c-wiz:nth-child(2) > h1 > span");
if (elementsAppName.size() != 0) {
appName = elementsAppName.text();
} else {
appName = "Crawling code(App Name) needs to be changed.";
}
}
elementsAppVersion = doc.select("div > div:nth-child(4) > span > div > span");
if (elementsAppVersion.size() != 0) {
appVersion = elementsAppVersion.text();
} else {
appName = "Crawling code(App Version) needs to be changed.";
}
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
실제 테스트한 앱은 아래와 같은 화면을 구성하고 있습니다.
패키지명을 입력하고 버튼을 누르면 Play 스토어에서 크롤링해 온 앱 이름과 버전을 표시해줍니다.
아래처럼 여러 경우에 따라서 App name과 App version에 표시해주는 정보가 달라집니다.
btnGetAppInfo = findViewById(R.id.btnGetAppInfo);
btnGetAppInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideKeyboard();
if (isNetwork()) {
try {
getAppInfo = new GetAppInfo(etPackageName.getText().toString());
if (getAppInfo.execute().get()) {
tvAppName.setText(getAppInfo.getAppName());
tvAppVersion.setText(getAppInfo.getAppVersion());
} else {
tvAppName.setText("N/A (The package name app does not exist on the Play Store.)");
tvAppVersion.setText("N/A (The package name app does not exist on the Play Store.)");
}
} catch (Exception e) {
e.printStackTrace();
tvAppName.setText("N/A (Error)");
tvAppVersion.setText("N/A (Error)");
}
} else {
tvAppName.setText("N/A (No internet connection)");
tvAppVersion.setText("N/A (No internet connection)");
}
}
});
위의 예제 소스를 첨부하였으니 참고하세요.
'Android Dev > Snippets & Samples' 카테고리의 다른 글
화면 밝기 변경 (Change screen brightness) (0) | 2019.02.10 |
---|---|
일정 시간 후에 실행하기 (백키 두 번 눌러 종료, 일정 시간 후 종료 예제) (0) | 2019.01.24 |
앱 진입시 스크린 리더(TalkBack, Voice Assistant) 감지하기 (0) | 2018.12.15 |
외부 전원 연결 / 헤드셋 연결 감지하기 (0) | 2018.11.18 |
애플리케이션 정보 (Application info.) 보기로 이동 (0) | 2018.11.02 |