গুগলপ্লে সার্ভিসস ইউটিলে বনাম গুগলএপিআইএভলভিটি


102

আমি আমার অ্যান্ড্রয়েড অ্যাপে গুগল প্লে পরিষেবা ব্যবহার করার চেষ্টা করছি। গুগল ডকুমেন্ট যেমন বলেছে, গুগল এপিআই ব্যবহার করার আগে এটি পাওয়া যায় কিনা তা আমাদের খতিয়ে দেখা উচিত। আমি এটি পরীক্ষা করার জন্য কিছু উপায় অনুসন্ধান করেছি। আমি যা পেয়েছি তা এখানে:

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;
}

তবে আমি যখন গুগল অপি গুগলপ্লেসার্ভিসস ইউটিলেট পৃষ্ঠাতে যাই, https://developers.google.com/android/references/com/google/android/gms/common/GooglePlayServicesUtil

আমি দেখতে পেয়েছি যে সমস্ত ফাংশন হ্রাস করা হয়েছে । উদাহরণস্বরূপ, পদ্ধতি

গুগলপ্লে সার্ভিসস ইউটি.এল গুগলপ্লে সার্ভিসস উপলভ্য (অবমূল্যায়িত)

এবং গুগল ব্যবহার করার পরামর্শ দেয়:

গুগলএপিআইভিটি উপলব্ধগুগলপ্লে সার্ভিসস উপলভ্য

যাইহোক, আমি যখন গুগলএপিআইএভিটিবিলিটি.আইস গুগলপ্লে সার্ভিসস উপলভ্য ব্যবহার করার চেষ্টা করি তখন আমি ত্রুটি বার্তাটি পাই:

এখানে চিত্র বর্ণনা লিখুন


আমি গুগলএপিআইএভিলিটিটি কোথায় পাই? আমি এটি খুঁজে পাচ্ছি না।
এমসিএমিল্যাব

@ এমসিমিলেব +1। আমি 8.1.0 থেকে 8.4.0 এ আপগ্রেড করেছি এবং GooglePlayServicesUtilচলে গিয়েছি (যা "মাইনর" আপডেটের জন্য খারাপ অভ্যাস বলে মনে হচ্ছে) তবে আমি GoogleApiAvailabilityপ্রতিস্থাপন হিসাবে ব্যবহার করতে দেখছি না ।
স্পারকি 21

উত্তর:


203

আমি সমাধান খুঁজে পেয়েছি। এর মধ্যে GoogleApiAvailability, সমস্ত পদ্ধতি হ'ল পাবলিক পদ্ধতি, অন্যদিকে GooglePlayServicesUtilসমস্ত পদ্ধতিতে স্থির পাবলিক ফাংশন।

সুতরাং GoogleApiAv উপলভ্য ব্যবহার করতে, সঠিক উপায়টি হ'ল:

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;
}

9
কী: PLAY_SERVICES_RESOLUTION_REQUEST
সামান

12
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
ফেরারমোলিনা

7
এটি একটি নির্বিচারে পূর্ণসংখ্যা ger আপনি মান আপ করতে পারেন।
টিম্ম্ম

4
কেউ কেউ 9000 এর চেয়ে বেশি কিছুতে মান নির্ধারণ করতে পছন্দ করে
matthias_b_nz

12
গুগল প্লে পরিষেবাদির এই পুরো লাইব্রেরি ডিজাইনটি পুরো গণ্ডগোল। এগুলি সমস্ত ত্রুটিযুক্ত প্লাস, ডকুমেন্টেশনের অভাব ছাড়াও এটি অনুসরণ করা শক্ত।
এমআর 5

64

GooglePlayServicesUtil ক্লাসটি আর ব্যবহার করা উচিত নয়!

এখানে পরিবর্তে GoogleApiAv উপলভ্য ক্লাসটি কীভাবে ব্যবহার করা যেতে পারে - যখন উদাহরণস্বরূপ GCM (বা অন্য কোনও গুগল পরিষেবা) প্রয়োজন হয়:

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()অন্য জায়গায় কলও করেন)।


2
আপনি কি উত্সটির দিকে ইঙ্গিত করতে পারেন যে দাবি করে যে "ক্লাসে গুগলপ্লে সার্ভিসস ইউটিসটি আর ব্যবহার করা উচিত নয়!"! গুগল প্লে পরিষেবাদি এপিআই এত বিভ্রান্তিকর।
লাচেজার

8
সকল পদ্ধতি GooglePlayServicesUtil যেমন javadoc নেওয়া উপরের অবচিত প্লাস সুপারিশ হিসাবে চিহ্নিত GOOGLE_PLAY_SERVICES_PACKAGEথেকে ধ্রুবক GoogleApiAvailability ব্যবহার করেন না: বর্গ তোমাকে বলতে গুগলের উপায় GooglePlayServicesUtilআর বর্গ।
আলেকজান্ডার ফারবার

3
ডিভাইসটিতে গুগল প্লে পরিষেবাগুলির একটি পুরানো সংস্করণ রয়েছে যেখানে GoogleApiAvailabilityক্লাসটি বিদ্যমান নেই? যদি আমরা ক্লাসটি স্ট্যাটিকভাবে, এমনকি শর্তাধীন অভিব্যক্তির অভ্যন্তরে উল্লেখ করি তবে এটি অ্যাপটি ক্রাশ করবে না?
কেভিন ক্রামউইদে

6
@ কেভিন ক্রামউইডি, GoogleApiAvailabilityক্লায়েন্ট লাইব্রেরির অংশ is সুতরাং এটির কোডটি অ্যাপ্লিকেশন => এ সংকলিত আছে সে সম্পর্কে চিন্তা করবেন না।
উইন্ডারাইডার

9
আপনাকেঅ্যাক্টিভিটি রেজাল্ট () এ কল করা উচিত নয়। এটি বাইরে থেকে ডেকে বোঝানো হয়েছে, যখন অন্য কোনও ক্রিয়াকলাপ ফল দেয়।
ইয়ার

10

পরিবর্তে আপনাকে গুগলএপিআইএভিলিটি ব্যবহার করতে হবে:

GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); 
int errorCode = googleApiAvailability.isGooglePlayServicesAvailable(this);

thisপ্রতিনিধিত্ব করে context


9

এটিতে গুগল প্লে পরিষেবাদি APK রয়েছে কিনা তা নিশ্চিত করতে ডিভাইসটি পরীক্ষা করুন। যদি এটি না হয় তবে এমন একটি ডায়লগ প্রদর্শন করুন যা ব্যবহারকারীদের গুগল প্লে স্টোর থেকে 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;
}

0

আমি এটি সমস্ত জায়গায় ব্যবহার করার জন্য বেসএটিভিটি ক্লাসে মজাদার হিসাবে যুক্ত করেছি

    fun checkGooglePlayServices(okAction : ()-> Unit , errorAction: (msg:String, isResolved:Boolean)-> Unit){
    val apiAvailability = GoogleApiAvailability.getInstance()
    val resultCode = apiAvailability.isGooglePlayServicesAvailable(this)
    if (resultCode != ConnectionResult.SUCCESS) {
        if (apiAvailability.isUserResolvableError(resultCode)) {
            apiAvailability.getErrorDialog(
                this,
                resultCode,
                PLAY_SERVICES_RESOLUTION_REQUEST
            ).show()
             // dialoe when click on ok should let user go to install/update play serices


            errorAction("dialog is shown" , true)

        } else {
          "checkGooglePlayServices  This device is not supported.".log(mTag)
            errorAction("This device is not supported",false)
        }
    }else{
        okAction()
    }
}

companion object {
    const val PLAY_SERVICES_RESOLUTION_REQUEST = 1425
}

এটি এটি ব্যবহার করুন

    (activity as? BaseActivity)?.checkGooglePlayServices({
        // ok so start map
        initializeMap()
    },
        { msg, isResolved ->
            if (!isResolved)
                context?.show(msg)

        }
    )

অথবা আপনি এটি নিজের পছন্দমতো করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.