如何手动更新HMS Core?

问题描述

我在Appgallery中有一个应用程序,该应用程序也可用于P8或P9等较旧的华为手机。我注意到,由于HMS Core过时,旧手机有时会崩溃。我读到HMS Core可以自动更新,但是我想在运行该应用程序后立即进行更新。@H_404_1@

使用地图时可以调用它(我在第二个屏幕上显示它),但是我想尽快通知用户有关过时的HMS Core。@H_404_1@

是否有示例如何手动调用HMS Core版本检查?@H_404_1@

解决方法

是的,有可能。这是提供的解决方案。一切都基于变量baseVersion。如果它的值高于您的HMS Core版本代码,那么您将得到提到的对话框。

import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.util.Log;

import com.huawei.hms.adapter.AvailableAdapter;
import com.huawei.hms.adapter.internal.AvailableCode;
import com.huawei.hms.api.ConnectionResult;


/**
 * Check for HMS Update
 */
public class HmsUpdateUtil {
    private static final String TAG = "HmsUpdateUtil";

    private static boolean isInitialized = false;

    private static int versionCheckResult = 12;


    /**
     * Check if HMS needs update
     *
     * @param context context
     * @return result,0 Available,1 not Available
     */
    public static int isHmsAvailable(Context context) {
        if (versionCheckResult == ConnectionResult.SUCCESS ) {
            return ConnectionResult.SUCCESS;
        }
        Log.d(TAG,"isInitialized is:" + isInitialized);

        if (isInitialized) {
            return 1;
        }

        // minimum HMS version,if less than this version,result will not be 0
        int baseVersion = 50000300;

        AvailableAdapter availableAdapter = new AvailableAdapter(baseVersion);
        int result = availableAdapter.isHuaweiMobileServicesAvailable(context);
        Log.i(TAG,"HMS update result is: " + result);
        
        isInitialized = true;
        
        if (result == ConnectionResult.SUCCESS) {
            Log.i(TAG,"HMS is avaiable");
        } else {
            if (availableAdapter.isUserResolvableError(result)) {
                resolution(availableAdapter,context);
            } else {
                Log.e(TAG,"HMS is not avaiable " + AvailableCode.ERROR_NO_ACTIVITY);
            }
        }
        versionCheckResult = result;
        return result;
    }

    private static void resolution(AvailableAdapter availableAdapter,Context context) {
        Log.i(TAG,"HMS update start :");
        Activity activity = findActivity(context);
        if (activity == null) {
            Log.e(TAG,"HMS is not available" + AvailableCode.ERROR_NO_ACTIVITY);
            return;
        }

        // this method will be call upgrade dialog box.
        availableAdapter.startResolution(activity,new AvailableAdapter.AvailableCallBack() {
            @Override
            public void onComplete(int result) {
                if (result == AvailableCode.SUCCESS) {
                    versionCheckResult = result;
                    Log.i(TAG,"HMS update start success");
                } else {
                    Log.e(TAG,"HMS update failed: " + result);
                    isInitialized = false;
                }
            }
        });
    }

    /**
     * Get Activity by Context
     * @param context context
     * @return Activity
     */
    public static Activity findActivity(Context context) {
        Activity activity = null;
        if (context instanceof Activity) {
            return (Activity) context;
        }
        if (context instanceof ContextWrapper) {
            ContextWrapper wrapper = (ContextWrapper) context;
            return findActivity(wrapper.getBaseContext());
        } else {
            return activity;
        }
    }
}
,

要在华为手机上手动升级HMS Core(APK),请致电以下提供的示例代码,以检查版本号是否早于5.0.0.300。 如果是这样,将出现AppGallery上的HMS Core下载屏幕。

此外,请记住在URI中替换 channelId 。 根据需要定义了 channelId ,以识别频道数据。 channelId 是1级频道的ID,即用户来自的频道。

public static void checkUpdate(Context context){
    String version = "5.0.0.300";
    String pkg = "com.huawei.hwid";
    if (version.compareTo(getVersionCode(pkg,context))  > 0) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("hiapplink://com.huawei.appmarket?appId=C10132067&channelId=xxxxx&referrer=&detailType=0"));
        context.startActivity(intent);
    }
}

private static String getVersionCode(String packageName,Context context) {
    PackageManager packageManager = context.getPackageManager();
    try {
        PackageInfo packageInfo = packageManager.getPackageInfo(packageName,0);
        return packageInfo.versionName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}
,

link下载HMS核心

使用adb安装APP_NAME

或尝试

adb install -r APP_NAME 或尝试

adb install -t APP_NAME