Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 08cbe86

Browse files
master
1 parent 844237f commit 08cbe86

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

‎app/src/main/java/com/aniketjain/textscanner/MainActivity.java‎

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
package com.aniketjain.textscanner;
22

33
import android.Manifest;
4+
import android.content.ClipData;
5+
import android.content.ClipboardManager;
6+
import android.content.Context;
47
import android.content.Intent;
58
import android.content.pm.PackageManager;
69
import android.graphics.Bitmap;
710
import android.net.Uri;
811
import android.os.Bundle;
912
import android.provider.MediaStore;
13+
import android.util.SparseArray;
1014
import android.view.View;
15+
import android.widget.Toast;
1116

1217
import androidx.annotation.Nullable;
1318
import androidx.appcompat.app.AppCompatActivity;
1419
import androidx.core.app.ActivityCompat;
1520
import androidx.core.content.ContextCompat;
1621

1722
import com.aniketjain.textscanner.databinding.ActivityMainBinding;
23+
import com.google.android.gms.vision.Frame;
24+
import com.google.android.gms.vision.text.TextBlock;
25+
import com.google.android.gms.vision.text.TextRecognizer;
1826
import com.theartofdev.edmodo.cropper.CropImage;
1927
import com.theartofdev.edmodo.cropper.CropImageView;
2028

@@ -51,7 +59,10 @@ private void checkPermissions() {
5159
private void onClickListeners() {
5260
binding.captureBtn.setOnClickListener(view -> {
5361
CropImage.activity().setGuidelines(CropImageView.Guidelines.ON).start(this);
54-
62+
});
63+
binding.copyBtn.setOnClickListener(view -> {
64+
String scanned_text = binding.dataTv.getText().toString();
65+
copyToClipBoard(scanned_text);
5566
});
5667
}
5768

@@ -69,6 +80,7 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
6980
Uri uri = (result != null) ? result.getUri() : null;
7081
try {
7182
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
83+
getTextFromImage(bitmap);
7284
} catch (IOException e) {
7385
e.printStackTrace();
7486
}
@@ -77,6 +89,31 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
7789
}
7890

7991
private void getTextFromImage(Bitmap bitmap) {
92+
TextRecognizer recognizer = new TextRecognizer.Builder(this).build();
93+
if (!recognizer.isOperational()) {
94+
Toast.makeText(this, "Error!", Toast.LENGTH_SHORT).show();
95+
} else {
96+
Frame frame = new Frame.Builder().setBitmap(bitmap).build();
97+
SparseArray<TextBlock> sparseArray = recognizer.detect(frame);
98+
StringBuilder stringBuilder = new StringBuilder();
99+
for (int i = 0; i < sparseArray.size(); i++) {
100+
TextBlock textBlock = sparseArray.valueAt(i);
101+
stringBuilder.append(textBlock.getValue());
102+
stringBuilder.append("\n");
103+
}
104+
105+
binding.dataTv.setText(stringBuilder.toString());
106+
binding.captureBtn.setText("Retake");
107+
binding.copyBtn.setVisibility(View.VISIBLE);
108+
}
109+
}
110+
111+
private void copyToClipBoard(String text) {
112+
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
113+
ClipData clipData = ClipData.newPlainText("Copied text", text);
114+
clipboardManager.setPrimaryClip(clipData);
80115

116+
// let user know data save on clipBoard Successfully.
117+
Toast.makeText(this, "Copied to clipBoard", Toast.LENGTH_SHORT).show();
81118
}
82119
}

‎app/src/main/res/layout/activity_main.xml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
android:layout_margin="8dp">
1414

1515
<TextView
16-
android:id="@+id/data"
16+
android:id="@+id/data_tv"
1717
android:layout_width="match_parent"
1818
android:layout_height="wrap_content"
1919
android:text="@string/data_text1"
@@ -26,8 +26,7 @@
2626
android:layout_height="wrap_content"
2727
android:layout_alignParentBottom="true"
2828
android:layout_margin="8dp"
29-
android:orientation="horizontal"
30-
android:weightSum="2">
29+
android:orientation="horizontal">
3130

3231
<Button
3332
android:id="@+id/capture_btn"
@@ -43,7 +42,8 @@
4342
android:layout_height="wrap_content"
4443
android:layout_marginHorizontal="8dp"
4544
android:layout_weight="1"
46-
android:text="Copy Text" />
45+
android:text="Copy Text"
46+
android:visibility="gone" />
4747
</LinearLayout>
4848

4949
</RelativeLayout>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /