20200811のAndroidに関する記事は4件です。

【Flutter】TextFieldのonSubmittedコールバックが頻繁に呼ばれる時に確認すべきこと【Android】

TextFieldのプロパティであるonSubmitted

TextFieldのプロパティであるonSubmittedは公式ドキュメントによると
ユーザーがフィールドのテキストの編集を完了したことを示したときに呼び出されます
とのことだ。

発生した異常

ということで、実装したのだが、
テキスト入力が完了していないのに頻繁に呼ばれてしまう現象に見舞われた(Android版のみ)

その時のソースコードがこちら

main.dart
TextField(
// 省略…
 onFieldSubmitted: AddButtonTapped();
// 省略…
)

つまり、「テキストの入力が完了したら、AddButtonTapped()を呼んでくれ」というコードだ(と思っていた)

解決法

ソースコードを以下の様に書き換えた。

main.dart
TextField(
// 省略…
 onFieldSubmitted: (String str) {
   AddButtonTapped();
 }
// 省略…
)

引数を指定してあげる感じにした。

すると、冒頭で挙げた問題点「テキスト入力が完了していないのに頻繁に呼ばれてしまう現象」が解消した。

関連記事

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Kotlin入門】?:が出てきてなんのこっちゃ【エルビス演算子】

【 ?: の読み方】

ハテナ・コロン
とか
クエスチョン・コロン
と読んでるあなた、
間違っていますよ^^

これはエルビス演算子といいます。(ドヤ)

語源

エルビス・プレスリーの髪型に似ているからです。
(StackOverFlowより)

bVG64.png

https://stackoverflow.com/questions/48253107/what-does-do-in-kotlin-elvis-operator

用法

たとえばこんな時は

val hogehoge?= hugahuga ?: ""

hogehogeがnullでないとき、hogehoge = hugahuga
hogehogeがnullのとき、hogehoge = ""
を返します。

まとめ

エルビス演算子とかさらっと言えるとドヤれます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Kotlin入門】?:が出てきてなんのこっちゃのあなたへ【エルビス演算子】

【 ?: の読み方】

ハテナ・コロン
とか
クエスチョン・コロン
と読んでるあなた、
間違っていますよ^^

これはエルビス演算子といいます。(ドヤ)

語源

エルビス・プレスリーの髪型に似ているからです。
(StackOverFlowより)

bVG64.png

https://stackoverflow.com/questions/48253107/what-does-do-in-kotlin-elvis-operator

用法

たとえばこんな時は

val hogehoge?= hugahuga ?: ""

hogehogeがnullでないとき、hogehoge = hugahuga
hogehogeがnullのとき、hogehoge = ""
を返します。

まとめ

エルビス演算子とかさらっと言えるとドヤれます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

# HMS Core Scan SDKを使用したバーコードスキャン機能の実装

概要

当社の最新の記事で、HMS Core Scan SDKを迅速に統合する方法を検討し、このSDKをその他のオープンソースのバーコードスキャンツールと比較しました。まだこの記事をお読みでない場合は、ここクリックして、ご覧いただけます。
私たちは、商品を購入したり、ソーシャルメディアアカウントをフォローしたり、製品に関する情報を入手したりする場合に毎日バーコードを利用しています。今日は、バーコードスキャン機能をショッピングアプリに実装する方法についてご紹介します。

シナリオ

ユーザーはこの機能を使用してバーコードをスキャンし、製品の情報や購入時に利用できるリンクを受信できます。
GIF-200601_214005.gif

プロセス

image.png

準備

gradleディレクトリのbuild.gradleファイルを開く

image.png
allprojects > repositoriesに移動し、HMS Core SDKのMavenリポジトリアドレスを設定します。

allprojects {    
        repositories { 
        google() 
        jcenter() 
        maven {url 'http://developer.huawei.com/repo/'} 
    } 
 }

buildscript > repositoriesに移動し、HMS Core SDKのMavenリポジトリアドレスを設定します。

buildscript { 
    repositories { 
        google() 
        jcenter() 
        maven {url 'http://developer.huawei.com/repo/'} 
    } 
 }

ビルド依存関係を追加する

appディレクトリのbuild.gradleファイルを開きます。
image.png
HMS Core SDKを統合します。

dependencies{  
    implementation 'com.huawei.hms:scan:1.1.3.301'
}
Assign permissions and specify features.
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

SDKの統合にはデフォルト表示モードを使用するため、アプリのAndroidManifest.xmlファイルでスキャン画面を宣言します。

<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />

実装

製品の追加と製品の照会という2つの関数を実装できます。製品のバーコードをスキャンし、撮影することで製品をバインドできます。ユーザーは、バーコードをスキャンしてその製品を照会できます。

動的な権限の申請を送信する

private static final int PERMISSION_REQUESTS = 1;
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // Checking camera permission   
   if (!allPermissionsGranted()) {
       getRuntimePermissions();
   }
}

画面を開いて製品を追加する

Add Productをタップし、製品を追加できる画面を開きます。

public void addProduct(View view) {
        Intent intent = new Intent(MainActivity.this, AddProductActivity.class);
        startActivityForResult(intent, REQUEST_ADD_PRODUCT);
    }

バーコードをスキャンして製品情報を記録する

HUAWEI Scan Kitのデフォルト表示モードを使用してバーコードをスキャンします。

private void scanBarcode(int requestCode) {
        HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create();
        ScanUtil.startScan(this, requestCode, options);
    }

コールバック関数でスキャン結果を保存する

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null) {
            return;
        }
        if ((requestCode == this.REQUEST_CODE_SCAN_ALL)
                && (resultCode == Activity.RESULT_OK)) {
            HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
            if (obj != null && obj.getOriginalValue() != null) {
                this.barcode = obj.getOriginalValue();
            }

        } else if ((requestCode == this.REQUEST_TAKE_PHOTO)
                && (resultCode == Activity.RESULT_OK)) {
            ……
        }
}

バーコードをスキャンして製品を照会する

Query Productをタップし、製品を照会できる画面を開きます。コールバック関数を使用して結果を表示します。

public void queryProduct(View view) {
        HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create();
        ScanUtil.startScan(this, REQUEST_QUERY_PRODUCT, options);
}

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null) {
            return;
        }
        if ((requestCode == this.REQUEST_ADD_PRODUCT) && (resultCode == Activity.RESULT_OK)) {
            barcodeToProduct.put(data.getStringExtra(Constant.BARCODE_VALUE), data.getStringExtra(Constant.IMAGE_PATH_VALUE));
        } else if ((requestCode == this.REQUEST_QUERY_PRODUCT) && (resultCode == Activity.RESULT_OK)) {
            HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
            String path = "";
            if (obj != null && obj.getOriginalValue() != null) {
                path = barcodeToProduct.get(obj.getOriginalValue());
            }
            if (path != null && !path.equals("")) {
                loadCameraImage(path);
                showPictures();
            }
        }
    }

早速、試してみましょう

GIF-200527_161851-v2.gif

More Info in Huawei Developer website

https://developer.huawei.com/consumer/en/hms/huawei-mlkit

近日公開予定

HUAWEI Scan Kitを使用して可能となる、驚くような事例をさらにご紹介します。是非お待ちください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む