如何在一个 Activity 中使用两次 onActivityResult
How to use onActivityResult twice in one Activity
error:method onActivityResult(int,int, Intent) is already defined in class scan.
所以我正在尝试构建一个应用程序,您可以在其中拍摄照片,然后该应用程序会检测照片上的文字。遗憾的是,我使用了 onActivityResult
方法两次。
由于我是编码新手,一般来说有点笨,所以我不知道如何解决这个问题。
在我第一次使用它们的整数后面添加数字 1,但并没有这样做
private void camera(){
Intent intent2 = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent2, 0);
}
@Override
protected void onActivityResult (int requestCode1, int resultCode1 , Intent data1) {
super.onActivityResult(requestCode1,resultCode1,data1);
if (resultCode1==RESULT_OK){
Bitmap btp = (Bitmap) data1.getExtras().get("data");
imageView.setImageBitmap(btp);
}
}
public void detect (View v){
if (bitmap == null){
Toast.makeText(getApplicationContext(),"Bitmap is null",Toast.LENGTH_SHORT).show();
}
else {
FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap);
FirebaseVisionTextRecognizer firebaseVisionTextRecognizer = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
firebaseVisionTextRecognizer.processImage(firebaseVisionImage)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
process_text(firebaseVisionText);
}
});
}
}
private void process_text(FirebaseVisionText firebaseVisionText) {
List<FirebaseVisionText.TextBlock> blocks = firebaseVisionText.getTextBlocks();
if (blocks.size() == 0){
Toast.makeText(getApplicationContext(),"no text detected",Toast.LENGTH_LONG).show();
}
else {
for (FirebaseVisionText.TextBlock block:firebaseVisionText.getTextBlocks()){
String text = block.getText();
textView.setText(text);
}
}
}
public void pick_image(View v){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
imageView.setImageBitmap(bitmap);
}catch (IOException e){
e.printStackTrace();
}
}
}
错误:方法 onActivityResult(int,int,Intent) 已经在 class scan
中定义
你只需要把它放在一个onActivityResult
。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
imageView.setImageBitmap(bitmap);
}catch (IOException e){
e.printStackTrace();
}
}
if (resultCode==RESULT_OK){
Bitmap btp = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(btp);
}
}
在您的 class 中定义请求代码
static final int REQUEST_PHOTO_1 = 1;
static final int REQUEST_PHOTO_2 = 2;
然后在调用时使用
startActivityForResult(intent1, REQUEST_PHOTO_1);
startActivityForResult(intent2, REQUEST_PHOTO_2);
现在,您可以在 onActivityResult 中执行类似的操作。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_PHOTO_1 && resultCode == RESULT_OK)
{
....
}
else if(requestCode == REQUEST_PHOTO_2 && resultCode == RESULT_OK)
{
....
}
else if (resultCode==RESULT_OK){
Bitmap btp = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(btp);
}
}
看看at the documentation and the reference.
startActivityForResult(Intent intent, int requestCode)
的第二个参数是请求代码,将作为onActivityResult(int requestCode, int resultCode, Intent data)
的第一个参数传递。
示例:
private void camera(){
Intent intent2 = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent2, 0);
}
public void pick_image(View v){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK)
{
switch(requestCode){
case 0: // handle camera
Bitmap btp = (Bitmap) data1.getExtras().get("data");
imageView.setImageBitmap(btp);
break;
case 1: // handle pick_image
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
imageView.setImageBitmap(bitmap);
} catch (IOException e){
e.printStackTrace();
}
break;
}
}
}
如文档所示,您应该将请求代码重构为 class 常量,以便更好地阅读和理解。
error:method onActivityResult(int,int, Intent) is already defined in class scan.
所以我正在尝试构建一个应用程序,您可以在其中拍摄照片,然后该应用程序会检测照片上的文字。遗憾的是,我使用了 onActivityResult
方法两次。
由于我是编码新手,一般来说有点笨,所以我不知道如何解决这个问题。
在我第一次使用它们的整数后面添加数字 1,但并没有这样做
private void camera(){
Intent intent2 = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent2, 0);
}
@Override
protected void onActivityResult (int requestCode1, int resultCode1 , Intent data1) {
super.onActivityResult(requestCode1,resultCode1,data1);
if (resultCode1==RESULT_OK){
Bitmap btp = (Bitmap) data1.getExtras().get("data");
imageView.setImageBitmap(btp);
}
}
public void detect (View v){
if (bitmap == null){
Toast.makeText(getApplicationContext(),"Bitmap is null",Toast.LENGTH_SHORT).show();
}
else {
FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap);
FirebaseVisionTextRecognizer firebaseVisionTextRecognizer = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
firebaseVisionTextRecognizer.processImage(firebaseVisionImage)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
process_text(firebaseVisionText);
}
});
}
}
private void process_text(FirebaseVisionText firebaseVisionText) {
List<FirebaseVisionText.TextBlock> blocks = firebaseVisionText.getTextBlocks();
if (blocks.size() == 0){
Toast.makeText(getApplicationContext(),"no text detected",Toast.LENGTH_LONG).show();
}
else {
for (FirebaseVisionText.TextBlock block:firebaseVisionText.getTextBlocks()){
String text = block.getText();
textView.setText(text);
}
}
}
public void pick_image(View v){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
imageView.setImageBitmap(bitmap);
}catch (IOException e){
e.printStackTrace();
}
}
}
错误:方法 onActivityResult(int,int,Intent) 已经在 class scan
中定义你只需要把它放在一个onActivityResult
。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
imageView.setImageBitmap(bitmap);
}catch (IOException e){
e.printStackTrace();
}
}
if (resultCode==RESULT_OK){
Bitmap btp = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(btp);
}
}
在您的 class 中定义请求代码
static final int REQUEST_PHOTO_1 = 1;
static final int REQUEST_PHOTO_2 = 2;
然后在调用时使用
startActivityForResult(intent1, REQUEST_PHOTO_1);
startActivityForResult(intent2, REQUEST_PHOTO_2);
现在,您可以在 onActivityResult 中执行类似的操作。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_PHOTO_1 && resultCode == RESULT_OK)
{
....
}
else if(requestCode == REQUEST_PHOTO_2 && resultCode == RESULT_OK)
{
....
}
else if (resultCode==RESULT_OK){
Bitmap btp = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(btp);
}
}
看看at the documentation and the reference.
startActivityForResult(Intent intent, int requestCode)
的第二个参数是请求代码,将作为onActivityResult(int requestCode, int resultCode, Intent data)
的第一个参数传递。
示例:
private void camera(){
Intent intent2 = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent2, 0);
}
public void pick_image(View v){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK)
{
switch(requestCode){
case 0: // handle camera
Bitmap btp = (Bitmap) data1.getExtras().get("data");
imageView.setImageBitmap(btp);
break;
case 1: // handle pick_image
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
imageView.setImageBitmap(bitmap);
} catch (IOException e){
e.printStackTrace();
}
break;
}
}
}
如文档所示,您应该将请求代码重构为 class 常量,以便更好地阅读和理解。