Android의 소켓을 사용하여 클라이언트 서버 메시징 앱에 Huawei ML Kit(텍스트 번역) 통합

소개

이 기사에서는 Huawei ML 키트를 Android 애플리케이션에 통합하는 방법을 배웁니다. ML Kit는 많은 텍스트 서비스를 제공합니다. 참조 섹션에 제공된 링크에서 이러한 서비스를 확인할 수 있습니다. 이 샘플에서는 텍스트 서비스 중 하나를 통합합니다. 온디바이스 번역은 인터넷 서비스를 사용할 수 없는 경우에도 온디바이스 모델을 지원하여 소스 언어의 텍스트를 대상 언어로 번역합니다.

지원되는 장치


개발 개요

Android Studio IDE를 설치해야 하며 Android 애플리케이션 개발에 대한 사전 지식이 있다고 가정합니다.

하드웨어 요구 사항

Windows 10을 실행하는 컴퓨터(데스크탑 또는 노트북).
디버깅에 사용되는 Android 휴대폰(USB 케이블 포함).
소프트웨어 요구 사항

자바 JDK 1.8 이상.
Android Studio 소프트웨어가 설치되었습니다.
HMS 코어(APK) 4.X 이상
통합 단계

1단계. Huawei 개발자 계정 및 Huawei 개발자 웹사이트에서 신원 확인 완료, 등록Huawei ID을 참조하십시오.

2단계. Create project in AppGallery Connect

3단계. Adding HMS Core SDK

코딩을 시작하자

로그인 방법을 어떻게 호출합니까?

private void signInWithHuaweiID() {

AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();

service = AccountAuthManager.getService(ClientActivity.this, authParams);

startActivityForResult(service.getSignInIntent(), 1212);

}


로그인 결과는 어떻게 얻나요?

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

// Process the authorization result to obtain the authorization code from AuthAccount.

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 1212) {

Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);

if (authAccountTask.isSuccessful()) {

// The sign-in is successful, and the user's ID information and authorization code are obtained.

AuthAccount authAccount = authAccountTask.getResult();

Log.i("TAG", "serverAuthCode:" + authAccount.getAuthorizationCode());

userName = authAccount.getDisplayName();

makeConnect();

} else {

// The sign-in failed.

Log.e("TAG", "sign in failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());

}

}

}


어떻게 서버를 시작합니까?

wManager = (WifiManager) getSystemService(WIFI_SERVICE);

serverIP = Formatter.formatIpAddress(wManager.getConnectionInfo().getIpAddress());

ip_txt.setText(serverIP);

class ServerThread implements Runnable {

@Override

public void run() {

try {

while (true) {

serverSocket = new ServerSocket(POST_NUMBER);

socket = serverSocket.accept();

output = new PrintWriter(socket.getOutputStream());

input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

Log.d("TAG", " here ");

runOnUiThread(new Runnable() {

@Override

public void run() {

tv_status.setText("Waiting for conn at " + POST_NUMBER);

}

});

handler.post(new Runnable() {

@Override

public void run() {

tv_status.setText("Connected");

}

});

}

} catch (Exception e) {

e.printStackTrace();

}

}

}


소켓을 사용하여 메시지를 어떻게 보내나요?

class SendMessage implements Runnable {

private String message;

SendMessage(String message) {

this.message = message;

}

@Override

public void run() {

output.write(message+"\r");

output.flush();

runOnUiThread(new Runnable() {

@Override

public void run() {

tv_chat.append("\n New Message: " + message);

ed_message.setText("");

}

});

Thread.interrupted();

}

}


소켓을 사용하여 메시지를 수신하려면 어떻게 해야 합니까?

private class ReadMessage implements Runnable {

@Override

public void run() {

while (true) {

try {

// Log.d("TAG","Server: Listening for message");

if(input!=null){

final String message = input.readLine();

if (message != null) {

handler.post(new Runnable() {

@Override

public void run() {

tv_chat.append("\n" + message );

}

});

}

}

} catch (IOException e) {

// Log.e("TAG","Error while receiving message");

e.printStackTrace();

}

}

}

}


소켓 및 기타 연결을 닫습니다.

@Override

protected void onPause() {

super.onPause();

if (socket != null) {

try {

output.close();

input.close();

socket.close();



} catch (IOException e) {

e.printStackTrace();

}

}

}


인증 권한을 어떻게 취소합니까?

if(service!=null){

// service indicates the AccountAuthService instance generated using the getService method during the sign-in authorization.

service.cancelAuthorization().addOnCompleteListener(new OnCompleteListener<Void>() {

@Override

public void onComplete(Task<Void> task) {

if (task.isSuccessful()) {

// Processing after a successful authorization cancellation.

Log.i("TAG", "onSuccess: ");

} else {

// Handle the exception.

Exception exception = task.getException();

if (exception instanceof ApiException){

int statusCode = ((ApiException) exception).getStatusCode();

Log.i("TAG", "onFailure: " + statusCode);

}

}

}

});

}


ML 텍스트 서비스를 사용하여 메시지를 어떻게 번역합니까?

private void translateMessage(String text) {

MLApplication.getInstance().setApiKey(API_KEY);

// create an offline translator.

MLLocalTranslateSetting setting = new MLLocalTranslateSetting.Factory()

// Set the source language code. The ISO 639-1 standard is used. This parameter is mandatory. If this parameter is not set, an error may occur.

.setSourceLangCode("en")

// Set the target language code. The ISO 639-1 standard is used. This parameter is mandatory. If this parameter is not set, an error may occur.

.setTargetLangCode("hi")

.create();

myLocalTranslator = MLTranslatorFactory.getInstance().getLocalTranslator(setting);

// Set the model download policy.

MLModelDownloadStrategy downloadStrategy = new MLModelDownloadStrategy.Factory()

.needWifi()// It is recommended that you download the package in a Wi-Fi environment.

.create();

// Create a download progress listener.

MLModelDownloadListener modelDownloadListener = new MLModelDownloadListener() {

@Override

public void onProcess(long alreadyDownLength, long totalLength) {

runOnUiThread(new Runnable() {

@Override

public void run() {

// Display the download progress or perform other operations.

}

});

}

};

myLocalTranslator.preparedModel(downloadStrategy, modelDownloadListener).

addOnSuccessListener(new OnSuccessListener<Void>() {

@Override

public void onSuccess(Void aVoid) {

// Called when the model package is successfully downloaded.

// input is a string of less than 5000 characters.

final Task<String> task = myLocalTranslator.asyncTranslate(text);

// Before translation, ensure that the models have been successfully downloaded.

task.addOnSuccessListener(new OnSuccessListener<String>() {

@Override

public void onSuccess(String translated) {

// Processing logic for detection success.

Log.d("TAG", "Text : " + translated);

}

}).addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

e.printStackTrace();

}

});

}

}).addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

e.printStackTrace();

}

});

}


결과

트릭과 팁

agconnect-services.json 파일이 추가되었는지 확인합니다.
필수 종속 항목이 추가되었는지 확인
AGC에서 서비스가 활성화되어 있는지 확인하십시오.
언어가 지원되는지 확인
결론

이 기사에서는 Android 애플리케이션의 소켓을 사용하여 클라이언트 서버 메시징에서 Huawei ML 키트 서비스, 즉 텍스트 번역(메시지)을 통합하는 방법을 배웠습니다. 결과 섹션에서 원하는 결과를 확인할 수 있습니다. Huawei ML 키트 기능이 귀하에게도 도움이 되기를 바라며 이 샘플과 같이 귀하의 요구 사항에 따라 ML 서비스를 사용할 수 있습니다.

읽어주셔서 정말 감사합니다. 이 기사가 Android 애플리케이션에 Huawei ML 키트 통합을 이해하는 데 도움이 되기를 바랍니다.

참조

Huawei ML KitTraining video
Checkout in forum

좋은 웹페이지 즐겨찾기