GooglePlayServicesUtil 대 GoogleApiAvailability
Android 앱에서 Google Play 서비스를 사용하려고합니다. Google 문서에 따르면 Google API를 사용하기 전에 사용할 수 있는지 확인해야합니다. 나는 그것을 확인하기 위해 어떤 방법을 찾았습니다. 내가 얻은 것은 다음과 같습니다.
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.i(TAG, "This device is not supported.");
finish();
}
return false;
}
return true;
}
하지만 Google Api GooglePlayServicesUtil 페이지로 이동하면 https://developers.google.com/android/reference/com/google/android/gms/common/GooglePlayServicesUtil
모든 기능이 더 이상 사용되지 않는다는 것을 알았습니다 . 예를 들어, 방법
GooglePlayServicesUtil.isGooglePlayServicesAvailable (지원 중단됨)
그리고 Google은 다음을 사용하는 것이 좋습니다.
GoogleApiAvailability.isGooglePlayServicesAvailable .
그러나 GoogleApiAvailability.isGooglePlayServicesAvailable을 사용하려고하면 오류 메시지가 표시됩니다.
해결책을 찾았습니다. 에서 GoogleApiAvailability
의 동안, 모든 방법이 공개되어있어서 GooglePlayServicesUtil
모든 방법 정적 공용 함수이다.
따라서 GoogleApiAvailability를 사용하는 올바른 방법은 다음과 같습니다.
private boolean checkPlayServices() {
GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int result = googleAPI.isGooglePlayServicesAvailable(this);
if(result != ConnectionResult.SUCCESS) {
if(googleAPI.isUserResolvableError(result)) {
googleAPI.getErrorDialog(this, result,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
}
return false;
}
return true;
}
GooglePlayServicesUtil 클래스를 더 이상 사용하면 안됩니다!
예를 들어 GCM (또는 다른 Google 서비스)이 필요한 경우 GoogleApiAvailability 클래스를 대신 사용할 수있는 방법은 다음과 같습니다 .
public static final int REQUEST_GOOGLE_PLAY_SERVICES = 1972;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
startRegistrationService();
}
}
private void startRegistrationService() {
GoogleApiAvailability api = GoogleApiAvailability.getInstance();
int code = api.isGooglePlayServicesAvailable(this);
if (code == ConnectionResult.SUCCESS) {
onActivityResult(REQUEST_GOOGLE_PLAY_SERVICES, Activity.RESULT_OK, null);
} else if (api.isUserResolvableError(code) &&
api.showErrorDialogFragment(this, code, REQUEST_GOOGLE_PLAY_SERVICES)) {
// wait for onActivityResult call (see below)
} else {
Toast.makeText(this, api.getErrorString(code), Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_GOOGLE_PLAY_SERVICES:
if (resultCode == Activity.RESULT_OK) {
Intent i = new Intent(this, RegistrationService.class);
startService(i); // OK, init GCM
}
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
최신 정보:
REQUEST_GOOGLE_PLAY_SERVICES
onActivityResult()
메서드 에서 참조 할 수있는 임의의 이름과 값을 가진 정수 상수입니다 .
또한 this.onActivityResult()
위의 코드를 호출 해도 괜찮습니다 ( super.onActivityResult()
다른 곳 에서도 호출 ).
대신 GoogleApiAvailability 를 사용해야 합니다.
GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
int errorCode = googleApiAvailability.isGooglePlayServicesAvailable(this);
this
를 나타냅니다 context
.
기기에 Google Play 서비스 APK가 있는지 확인하세요. 그렇지 않은 경우 사용자가 Google Play 스토어에서 APK를 다운로드하거나 기기의 시스템 설정에서 활성화 할 수있는 대화 상자를 표시합니다.
public static boolean checkPlayServices(Activity activity) {
final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(activity);
if (resultCode != ConnectionResult.SUCCESS) {
if (apiAvailability.isUserResolvableError(resultCode)) {
apiAvailability.getErrorDialog(activity, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
.show();
} else {
Logger.logE(TAG, "This device is not supported.");
}
return false;
}
return true;
}
참고 URL : https://stackoverflow.com/questions/31016722/googleplayservicesutil-vs-googleapiavailability
'code' 카테고리의 다른 글
java.io.NotSerializableException (0) | 2020.08.21 |
---|---|
서블릿 관련 클래스에서 이름으로 JSF 관리 Bean 가져 오기 (0) | 2020.08.21 |
그림자 확산 및 흐림을 제어하는 방법은 무엇입니까? (0) | 2020.08.21 |
ExecuteScalar, ExecuteReader 및 ExecuteNonQuery의 차이점은 무엇입니까? (0) | 2020.08.21 |
MySQL 덤프에서 DEFINER 절 제거 (0) | 2020.08.21 |