华为1+X考证准备

 MainActivity文件

package com.example.hmsdemo77;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.location.Location;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.huawei.hmf.tasks.OnCompleteListener;
import com.huawei.hmf.tasks.OnFailureListener;
import com.huawei.hmf.tasks.OnSuccessListener;
import com.huawei.hmf.tasks.Task;
import com.huawei.hms.common.ApiException;
import com.huawei.hms.location.FusedLocationProviderClient;
import com.huawei.hms.location.LocationCallback;
import com.huawei.hms.location.LocationRequest;
import com.huawei.hms.location.LocationResult;
import com.huawei.hms.location.LocationServices;
import com.huawei.hms.location.LocationSettingsRequest;
import com.huawei.hms.location.LocationSettingsResponse;
import com.huawei.hms.location.LocationSettingsStates;
import com.huawei.hms.location.SettingsClient;
import com.huawei.hms.mlsdk.MLAnalyzerFactory;
import com.huawei.hms.mlsdk.common.MLFrame;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzer;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerFactory;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerSetting;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionConstant;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionCoordinateInput;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewDetectResult;
import com.huawei.hms.mlsdk.text.MLLocalTextSetting;
import com.huawei.hms.mlsdk.text.MLText;
import com.huawei.hms.mlsdk.text.MLTextAnalyzer;
import com.huawei.hms.support.account.AccountAuthManager;
import com.huawei.hms.support.account.request.AccountAuthParams;
import com.huawei.hms.support.account.request.AccountAuthParamsHelper;
import com.huawei.hms.support.account.result.AuthAccount;
import com.huawei.hms.support.account.service.AccountAuthService;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // 声明fusedLocationProviderClient对象
    private FusedLocationProviderClient fusedLocationProviderClient;
    private ImageView image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button authorization=findViewById(R.id.authorizationCode);
        authorization.setOnClickListener(this);

        Button idToken=findViewById(R.id.idToken);
        idToken.setOnClickListener(this);

        Button silentToken=findViewById(R.id.silentToken);
        silentToken.setOnClickListener(this);

        Button closeToken=findViewById(R.id.closeToken);
        closeToken.setOnClickListener(this);

        Button cancelToken=findViewById(R.id.cancelToken);
        cancelToken.setOnClickListener(this);

        Button location=findViewById(R.id.location);
        location.setOnClickListener(this);

        Button text=findViewById(R.id.text);
        text.setOnClickListener(this);

        Button correct=findViewById(R.id.correct);
        correct.setOnClickListener(this);

        image = findViewById(R.id.image);

// 实例化fusedLocationProviderClient对象
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            //利用Authorization Code方式登录
            case R.id.authorizationCode:

                AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();
                AccountAuthService service = AccountAuthManager.getService(MainActivity.this, authParams);
                startActivityForResult(service.getSignInIntent(), 8888);

                break;

            //利用ID Token方式登录
            case R.id.idToken:

                AccountAuthParams authParams2 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken().createParams();
                AccountAuthService service2 = AccountAuthManager.getService(MainActivity.this, authParams2);
                startActivityForResult(service2.getSignInIntent(), 9999);

                break;

            //利用静默登录方式登录
            case R.id.silentToken:

                AccountAuthParams authParams3 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();
                AccountAuthService service3 = AccountAuthManager.getService(MainActivity.this, authParams3);
                Task<AuthAccount> task = service3.silentSignIn();

                task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
                    @Override
                    public void onSuccess(AuthAccount authAccount) {
                        //获取帐号信息
                        Log.i("aaa", "displayName:" + authAccount.getDisplayName());
                        //获取帐号类型,0表示华为帐号、1表示AppTouch帐号
                        Log.i("aaa", "accountFlag:" + authAccount.getAccountFlag());
                    }
                });

                task.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        //登录失败,您可以尝试使用getSignInIntent()方法显式登录
                        if (e instanceof ApiException) {
                            ApiException apiException = (ApiException) e;
                            Log.i("aaa", "sign failed status:" + apiException.getStatusCode());
                        }
                    }
                });

                break;

            //退出账号
            case R.id.closeToken:
                AccountAuthParams authParams4 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();
                AccountAuthService service4 = AccountAuthManager.getService(MainActivity.this, authParams4);
                Task<Void> signOutTask = service4.signOut();
                signOutTask.addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(Task<Void> task) {
                        //完成退出后的处理
                        Log.i("aaa", "signOut complete");
                    }
                });
                break;

            //账号取消授权
            case R.id.cancelToken:
                AccountAuthParams authParams5 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();
                AccountAuthService service5 = AccountAuthManager.getService(MainActivity.this, authParams5);
                //service为登录授权时使用getService方法生成的AccountAuthService实例
                service5.cancelAuthorization().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(Task<Void> task) {
                        if (task.isSuccessful()) {
                            //取消授权成功后的处理
                            Log.i("aaa", "onSuccess: ");
                        } else {
                            //异常处理
                            Exception exception = task.getException();
                            if (exception instanceof ApiException){
                                int statusCode = ((ApiException) exception).getStatusCode();
                                Log.i("aaa", "onFailure: " + statusCode);
                            }
                        }
                    }
                });
                break;

            //融合定位开发
            case R.id.location:

                requestPermission();

                SettingsClient settingsClient = LocationServices.getSettingsClient(this);

                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                LocationRequest mLocationRequest = new LocationRequest();
                builder.addLocationRequest(mLocationRequest);
                LocationSettingsRequest locationSettingsRequest = builder.build();
// 检查设备定位设置
                settingsClient.checkLocationSettings(locationSettingsRequest)
                        // 检查设备定位设置接口调用成功监听
                        .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                            @Override
                            public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                                LocationSettingsStates locationSettingsStates =
                                        locationSettingsResponse.getLocationSettingsStates();
                                StringBuilder stringBuilder = new StringBuilder();
                                // 定位开关是否打开
                                stringBuilder.append(",\nisLocationUsable=")
                                        .append(locationSettingsStates.isLocationUsable());
                                // HMS Core是否可用
                                stringBuilder.append(",\nisHMSLocationUsable=")
                                        .append(locationSettingsStates.isHMSLocationUsable());
                                Log.i("bbb", "checkLocationSetting onComplete:" + stringBuilder.toString());
                            }
                        })
                        // 检查设备定位设置接口失败监听回调
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(Exception e) {
                                Log.i("bbb", "checkLocationSetting onFailure:" + e.getMessage());
                            }
                        });
//持续定位
//                LocationRequest mLocationRequest = new LocationRequest();
// 设置位置更新的间隔(单位:毫秒)
                mLocationRequest.setInterval(10000);
// 设置定位类型
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

//启动定位
                LocationCallback mLocationCallback;
                mLocationCallback = new LocationCallback() {
                    @Override
                    public void onLocationResult(LocationResult locationResult) {
                        if (locationResult != null) {
                            // TODO: 处理位置回调结果
                            List<Location> locationList = locationResult.getLocations();
                            for(int i = 0;i<locationList.size();i++){
                                Location location = locationList.get(i);
                                Log.d("bbb","海拔"+location.getAltitude());
                            }
                        }
                    }
                };

                fusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                // TODO: 接口调用成功的处理
                                Log.d("bbb","定位启动接口调用成功");
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(Exception e) {
                                // TODO: 接口调用失败的处理
                                Log.d("bbb","定位启动接口调用失败");
                            }
                        });

                break;

                //文本识别
            case R.id.text:
                //方式二:使用自定义参数MLLocalTextSetting配置端侧文本分析器。
                MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
                        .setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
                        // 设置识别语种。
                        .setLanguage("zh")
                        .create();
                MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);

                // 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
                MLFrame frame = MLFrame.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.text));

                Task<MLText> task1 = analyzer.asyncAnalyseFrame(frame);
                task1.addOnSuccessListener(new OnSuccessListener<MLText>() {
                    @Override
                    public void onSuccess(MLText text) {
                        String recognizedText = text.getStringValue();
                        Log.d("aaa","文本识别成功"+recognizedText);  //输出识别的文字
                        // 识别成功处理。

                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.d("aaa","文本识别失败");
                        // 识别失败处理。
                    }
                });

                break;

                //文档校正
            case R.id.correct:
                MLDocumentSkewCorrectionAnalyzerSetting setting1 = new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();
                MLDocumentSkewCorrectionAnalyzer analyzer1 = MLDocumentSkewCorrectionAnalyzerFactory.getInstance().getDocumentSkewCorrectionAnalyzer(setting1);

                MLFrame frame1 = MLFrame.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.correct));

                // asyncDocumentSkewDetect异步调用。
                Task<MLDocumentSkewDetectResult> detectTask = analyzer1.asyncDocumentSkewDetect(frame1);
                // 异步检测文档倾斜
                detectTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewDetectResult>() {
                    @Override
                    public void onSuccess(MLDocumentSkewDetectResult detectResult) {
                        //获取文本框四个顶点的坐标数据并构建
                        Point leftTop = detectResult.getLeftTopPosition();
                        Point rightTop = detectResult.getRightTopPosition();
                        Point leftBottom = detectResult.getLeftBottomPosition();
                        Point rightBottom = detectResult.getRightBottomPosition();
                        List<Point> coordinates = new ArrayList<>();
                        coordinates.add(leftTop);
                        coordinates.add(rightTop);
                        coordinates.add(rightBottom);
                        coordinates.add(leftBottom);
                        MLDocumentSkewCorrectionCoordinateInput coordinateData = new MLDocumentSkewCorrectionCoordinateInput(coordinates);

                        // asyncDocumentSkewCorrect异步调用。
                        Task<MLDocumentSkewCorrectionResult> correctionTask = analyzer1.asyncDocumentSkewCorrect(frame1, coordinateData);
                        correctionTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewCorrectionResult>() {
                            @Override
                            public void onSuccess(MLDocumentSkewCorrectionResult refineResult) {
                                Log.d("aaa","检测成功");
                                image.setImageBitmap(refineResult.getCorrected());
                                // 检测成功。
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(Exception e) {
                                Log.d("aaa","检测失败");
                                // 检测失败。
                            }
                        });
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.d("aaa","检测失败");
                        // 检测失败。
                    }
                });

                if (analyzer1 != null) {
                    try {
                        analyzer1.stop();
                    } catch (IOException e) {
                        Log.d("aaa", "停止分析器失败", e);
                        e.printStackTrace();
                    }
                }

                break;
        }
    }
    private void requestPermission(){
        // Android SDK<=28 所需权限动态申请
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
            Log.i("bbb", "android sdk <= 28 Q");
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                String[] strings =
                        {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
                ActivityCompat.requestPermissions(this, strings, 1);
            }
        } else {
            // Android SDK>28 所需权限动态申请,需添加“android.permission.ACCESS_BACKGROUND_LOCATION”权限
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this,
                    "android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
                String[] strings = {android.Manifest.permission.ACCESS_FINE_LOCATION,
                        android.Manifest.permission.ACCESS_COARSE_LOCATION,
                        "android.permission.ACCESS_BACKGROUND_LOCATION"};
                ActivityCompat.requestPermissions(this, strings, 2);
            }
        }
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //授权登录结果处理,从AuthAccount中获取Authorization Code
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 8888) {
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                //登录成功,获取用户的帐号信息和Authorization Code
                AuthAccount authAccount = authAccountTask.getResult();
                Log.i("aaa", "serverAuthCode:" + authAccount.getAuthorizationCode());
            } else {
                //登录失败
                Log.e("aaa", "sign in failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());
            }
        }

        if(requestCode == 9999){
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                //登录成功,获取用户的帐号信息和ID Token
                AuthAccount authAccount = authAccountTask.getResult();
                Log.i("aaa", "idToken:" + authAccount.getIdToken());
                //获取帐号类型,0表示华为帐号、1表示AppTouch帐号
                Log.i("aaa", "accountFlag:" + authAccount.getAccountFlag());
            } else {
                //登录失败,不需要做处理,打点日志方便定位
                Log.e("aaa", "sign in failed : " +((ApiException) authAccountTask.getException()).getStatusCode());
            }
        }
    }
}

package com.example.hmsdemo77;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.location.Location;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.huawei.hmf.tasks.OnCompleteListener;
import com.huawei.hmf.tasks.OnFailureListener;
import com.huawei.hmf.tasks.OnSuccessListener;
import com.huawei.hmf.tasks.Task;
import com.huawei.hms.common.ApiException;
import com.huawei.hms.location.FusedLocationProviderClient;
import com.huawei.hms.location.LocationCallback;
import com.huawei.hms.location.LocationRequest;
import com.huawei.hms.location.LocationResult;
import com.huawei.hms.location.LocationServices;
import com.huawei.hms.location.LocationSettingsRequest;
import com.huawei.hms.location.LocationSettingsResponse;
import com.huawei.hms.location.LocationSettingsStates;
import com.huawei.hms.location.SettingsClient;
import com.huawei.hms.mlsdk.MLAnalyzerFactory;
import com.huawei.hms.mlsdk.common.MLFrame;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzer;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerFactory;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerSetting;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionConstant;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionCoordinateInput;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;
import com.huawei.hms.mlsdk.dsc.MLDocumentSkewDetectResult;
import com.huawei.hms.mlsdk.text.MLLocalTextSetting;
import com.huawei.hms.mlsdk.text.MLText;
import com.huawei.hms.mlsdk.text.MLTextAnalyzer;
import com.huawei.hms.support.account.AccountAuthManager;
import com.huawei.hms.support.account.request.AccountAuthParams;
import com.huawei.hms.support.account.request.AccountAuthParamsHelper;
import com.huawei.hms.support.account.result.AuthAccount;
import com.huawei.hms.support.account.service.AccountAuthService;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // 声明fusedLocationProviderClient对象
    private FusedLocationProviderClient fusedLocationProviderClient;
    private ImageView image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button authorization=findViewById(R.id.authorizationCode);
        authorization.setOnClickListener(this);

        Button idToken=findViewById(R.id.idToken);
        idToken.setOnClickListener(this);

        Button silentToken=findViewById(R.id.silentToken);
        silentToken.setOnClickListener(this);

        Button closeToken=findViewById(R.id.closeToken);
        closeToken.setOnClickListener(this);

        Button cancelToken=findViewById(R.id.cancelToken);
        cancelToken.setOnClickListener(this);

        Button location=findViewById(R.id.location);
        location.setOnClickListener(this);

        Button text=findViewById(R.id.text);
        text.setOnClickListener(this);

        Button correct=findViewById(R.id.correct);
        correct.setOnClickListener(this);

        image = findViewById(R.id.image);

// 实例化fusedLocationProviderClient对象
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            //利用Authorization Code方式登录
            case R.id.authorizationCode:

                AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();
                AccountAuthService service = AccountAuthManager.getService(MainActivity.this, authParams);
                startActivityForResult(service.getSignInIntent(), 8888);

                break;

            //利用ID Token方式登录
            case R.id.idToken:

                AccountAuthParams authParams2 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken().createParams();
                AccountAuthService service2 = AccountAuthManager.getService(MainActivity.this, authParams2);
                startActivityForResult(service2.getSignInIntent(), 9999);

                break;

            //利用静默登录方式登录
            case R.id.silentToken:

                AccountAuthParams authParams3 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();
                AccountAuthService service3 = AccountAuthManager.getService(MainActivity.this, authParams3);
                Task<AuthAccount> task = service3.silentSignIn();

                task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
                    @Override
                    public void onSuccess(AuthAccount authAccount) {
                        //获取帐号信息
                        Log.i("aaa", "displayName:" + authAccount.getDisplayName());
                        //获取帐号类型,0表示华为帐号、1表示AppTouch帐号
                        Log.i("aaa", "accountFlag:" + authAccount.getAccountFlag());
                    }
                });

                task.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        //登录失败,您可以尝试使用getSignInIntent()方法显式登录
                        if (e instanceof ApiException) {
                            ApiException apiException = (ApiException) e;
                            Log.i("aaa", "sign failed status:" + apiException.getStatusCode());
                        }
                    }
                });

                break;

            //退出账号
            case R.id.closeToken:
                AccountAuthParams authParams4 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();
                AccountAuthService service4 = AccountAuthManager.getService(MainActivity.this, authParams4);
                Task<Void> signOutTask = service4.signOut();
                signOutTask.addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(Task<Void> task) {
                        //完成退出后的处理
                        Log.i("aaa", "signOut complete");
                    }
                });
                break;

            //账号取消授权
            case R.id.cancelToken:
                AccountAuthParams authParams5 = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();
                AccountAuthService service5 = AccountAuthManager.getService(MainActivity.this, authParams5);
                //service为登录授权时使用getService方法生成的AccountAuthService实例
                service5.cancelAuthorization().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(Task<Void> task) {
                        if (task.isSuccessful()) {
                            //取消授权成功后的处理
                            Log.i("aaa", "onSuccess: ");
                        } else {
                            //异常处理
                            Exception exception = task.getException();
                            if (exception instanceof ApiException){
                                int statusCode = ((ApiException) exception).getStatusCode();
                                Log.i("aaa", "onFailure: " + statusCode);
                            }
                        }
                    }
                });
                break;

            //融合定位开发
            case R.id.location:

                requestPermission();

                SettingsClient settingsClient = LocationServices.getSettingsClient(this);

                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                LocationRequest mLocationRequest = new LocationRequest();
                builder.addLocationRequest(mLocationRequest);
                LocationSettingsRequest locationSettingsRequest = builder.build();
// 检查设备定位设置
                settingsClient.checkLocationSettings(locationSettingsRequest)
                        // 检查设备定位设置接口调用成功监听
                        .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                            @Override
                            public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                                LocationSettingsStates locationSettingsStates =
                                        locationSettingsResponse.getLocationSettingsStates();
                                StringBuilder stringBuilder = new StringBuilder();
                                // 定位开关是否打开
                                stringBuilder.append(",\nisLocationUsable=")
                                        .append(locationSettingsStates.isLocationUsable());
                                // HMS Core是否可用
                                stringBuilder.append(",\nisHMSLocationUsable=")
                                        .append(locationSettingsStates.isHMSLocationUsable());
                                Log.i("bbb", "checkLocationSetting onComplete:" + stringBuilder.toString());
                            }
                        })
                        // 检查设备定位设置接口失败监听回调
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(Exception e) {
                                Log.i("bbb", "checkLocationSetting onFailure:" + e.getMessage());
                            }
                        });
//持续定位
//                LocationRequest mLocationRequest = new LocationRequest();
// 设置位置更新的间隔(单位:毫秒)
                mLocationRequest.setInterval(10000);
// 设置定位类型
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

//启动定位
                LocationCallback mLocationCallback;
                mLocationCallback = new LocationCallback() {
                    @Override
                    public void onLocationResult(LocationResult locationResult) {
                        if (locationResult != null) {
                            // TODO: 处理位置回调结果
                            List<Location> locationList = locationResult.getLocations();
                            for(int i = 0;i<locationList.size();i++){
                                Location location = locationList.get(i);
                                Log.d("bbb","海拔"+location.getAltitude());
                            }
                        }
                    }
                };

                fusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                // TODO: 接口调用成功的处理
                                Log.d("bbb","定位启动接口调用成功");
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(Exception e) {
                                // TODO: 接口调用失败的处理
                                Log.d("bbb","定位启动接口调用失败");
                            }
                        });

                break;

                //文本识别
            case R.id.text:
                //方式二:使用自定义参数MLLocalTextSetting配置端侧文本分析器。
                MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
                        .setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
                        // 设置识别语种。
                        .setLanguage("zh")
                        .create();
                MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);

                // 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
                MLFrame frame = MLFrame.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.text));

                Task<MLText> task1 = analyzer.asyncAnalyseFrame(frame);
                task1.addOnSuccessListener(new OnSuccessListener<MLText>() {
                    @Override
                    public void onSuccess(MLText text) {
                        String recognizedText = text.getStringValue();
                        Log.d("aaa","文本识别成功"+recognizedText);  //输出识别的文字
                        // 识别成功处理。

                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.d("aaa","文本识别失败");
                        // 识别失败处理。
                    }
                });

                break;

                //文档校正
            case R.id.correct:
                MLDocumentSkewCorrectionAnalyzerSetting setting1 = new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();
                MLDocumentSkewCorrectionAnalyzer analyzer1 = MLDocumentSkewCorrectionAnalyzerFactory.getInstance().getDocumentSkewCorrectionAnalyzer(setting1);

                MLFrame frame1 = MLFrame.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.correct));

                // asyncDocumentSkewDetect异步调用。
                Task<MLDocumentSkewDetectResult> detectTask = analyzer1.asyncDocumentSkewDetect(frame1);
                // 异步检测文档倾斜
                detectTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewDetectResult>() {
                    @Override
                    public void onSuccess(MLDocumentSkewDetectResult detectResult) {
                        //获取文本框四个顶点的坐标数据并构建
                        Point leftTop = detectResult.getLeftTopPosition();
                        Point rightTop = detectResult.getRightTopPosition();
                        Point leftBottom = detectResult.getLeftBottomPosition();
                        Point rightBottom = detectResult.getRightBottomPosition();
                        List<Point> coordinates = new ArrayList<>();
                        coordinates.add(leftTop);
                        coordinates.add(rightTop);
                        coordinates.add(rightBottom);
                        coordinates.add(leftBottom);
                        MLDocumentSkewCorrectionCoordinateInput coordinateData = new MLDocumentSkewCorrectionCoordinateInput(coordinates);

                        // asyncDocumentSkewCorrect异步调用。
                        Task<MLDocumentSkewCorrectionResult> correctionTask = analyzer1.asyncDocumentSkewCorrect(frame1, coordinateData);
                        correctionTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewCorrectionResult>() {
                            @Override
                            public void onSuccess(MLDocumentSkewCorrectionResult refineResult) {
                                Log.d("aaa","检测成功");
                                image.setImageBitmap(refineResult.getCorrected());
                                // 检测成功。
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(Exception e) {
                                Log.d("aaa","检测失败");
                                // 检测失败。
                            }
                        });
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(Exception e) {
                        Log.d("aaa","检测失败");
                        // 检测失败。
                    }
                });

                if (analyzer1 != null) {
                    try {
                        analyzer1.stop();
                    } catch (IOException e) {
                        Log.d("aaa", "停止分析器失败", e);
                        e.printStackTrace();
                    }
                }

                break;
        }
    }
    private void requestPermission(){
        // Android SDK<=28 所需权限动态申请
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
            Log.i("bbb", "android sdk <= 28 Q");
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                String[] strings =
                        {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
                ActivityCompat.requestPermissions(this, strings, 1);
            }
        } else {
            // Android SDK>28 所需权限动态申请,需添加“android.permission.ACCESS_BACKGROUND_LOCATION”权限
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this,
                    "android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
                String[] strings = {android.Manifest.permission.ACCESS_FINE_LOCATION,
                        android.Manifest.permission.ACCESS_COARSE_LOCATION,
                        "android.permission.ACCESS_BACKGROUND_LOCATION"};
                ActivityCompat.requestPermissions(this, strings, 2);
            }
        }
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //授权登录结果处理,从AuthAccount中获取Authorization Code
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 8888) {
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                //登录成功,获取用户的帐号信息和Authorization Code
                AuthAccount authAccount = authAccountTask.getResult();
                Log.i("aaa", "serverAuthCode:" + authAccount.getAuthorizationCode());
            } else {
                //登录失败
                Log.e("aaa", "sign in failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());
            }
        }

        if(requestCode == 9999){
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                //登录成功,获取用户的帐号信息和ID Token
                AuthAccount authAccount = authAccountTask.getResult();
                Log.i("aaa", "idToken:" + authAccount.getIdToken());
                //获取帐号类型,0表示华为帐号、1表示AppTouch帐号
                Log.i("aaa", "accountFlag:" + authAccount.getAccountFlag());
            } else {
                //登录失败,不需要做处理,打点日志方便定位
                Log.e("aaa", "sign in failed : " +((ApiException) authAccountTask.getException()).getStatusCode());
            }
        }
    }
}

activity_main文件 

<LinearLayout android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical">

    <Button
        android:id="@+id/authorizationCode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"/>
    <Button
        android:id="@+id/idToken"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="idToken登录"/>
    <Button
        android:id="@+id/silentToken"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="静默登录"/>
    <Button
        android:id="@+id/closeToken"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出登录"/>
    <Button
        android:id="@+id/cancelToken"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="取消授权"/>
    <Button
        android:id="@+id/location"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="定位开关"/>
    <Button
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="文本识别"/>
    <Button
        android:id="@+id/correct"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="文本矫正"/>
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/correct"/>
</LinearLayout>

AndroidManifest准备

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.hmsdemo77">
    <application
        tools:replace="android:allowBackup"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HmsDemo77"
        android:usesCleartextTraffic="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.huawei.hms.client.channel.androidMarket" android:value="false" />
        <meta-data
            android:name="com.huawei.hms.ml.DEPENDENCY"
            android:value= "dsc"
            />
    </application>
    <queries>
        <intent>
            <action android:name="com.huawei.hms.core.aidlservice" />
        </intent>
    </queries>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.hmsdemo77">
    <application
        tools:replace="android:allowBackup"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HmsDemo77"
        android:usesCleartextTraffic="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.huawei.hms.client.channel.androidMarket" android:value="false" />
        <meta-data
            android:name="com.huawei.hms.ml.DEPENDENCY"
            android:value= "dsc"
            />
    </application>
    <queries>
        <intent>
            <action android:name="com.huawei.hms.core.aidlservice" />
        </intent>
    </queries>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值