What I want the app to do after scanning is to dial the number instead of displaying it.所以我是Android开发和zxing库的新手。我已经能够使用zxing库创建一个独立的QR扫描仪应用程序,但问题是当它扫描QR码时,我希望它能够在浏览器中打开URL或根据内容做一些其他内容。 QR而不是显示QR码的字符串内容。例如,如果QR码的字符串内容是URL" www.stackoverflow.com",我希望应用程序带我到网站而不是显示QR码的字符串内容。
这是我的CaptureActivity的代码
package com.skyers.jwetherell.quick_response_code;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.skyers.google.zxing.Result;
import com.skyers.google.zxing.ResultMetadataType;
import com.skyers.jwetherell.quick_response_code.result.ResultHandler;
import com.skyers.jwetherell.quick_response_code.result.ResultHandlerFactory;
import java.text.DateFormat;
import java.util.Date;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;
public class CaptureActivity extends com.skyers.jwetherell.quick_response_code.DecoderActivity {
private static final String TAG = CaptureActivity.class.getSimpleName();
private static final Set<ResultMetadataType> DISPLAYABLE_METADATA_TYPES = EnumSet.of(ResultMetadataType.ISSUE_NUMBER, ResultMetadataType.SUGGESTED_PRICE,
ResultMetadataType.ERROR_CORRECTION_LEVEL, ResultMetadataType.POSSIBLE_COUNTRY);
private TextView statusView = null;
private View resultView = null;
private boolean inScanMode = false;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.capture);
Log.v(TAG, "onCreate()");
resultView = findViewById(R.id.result_view);
statusView = (TextView) findViewById(R.id.status_view);
inScanMode = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy()");
}
@Override
protected void onResume() {
super.onResume();
Log.v(TAG, "onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.v(TAG, "onPause()");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (inScanMode)
finish();
else
onResume();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void handleDecode(Result rawResult, Bitmap barcode) {
drawResultPoints(barcode, rawResult);
ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);
handleDecodeInternally(rawResult, resultHandler, barcode);
}
protected void showScanner() {
inScanMode = true;
resultView.setVisibility(View.GONE);
statusView.setText(R.string.msg_default_status);
statusView.setVisibility(View.VISIBLE);
viewfinderView.setVisibility(View.VISIBLE);
}
protected void showResults() {
inScanMode = false;
statusView.setVisibility(View.GONE);
viewfinderView.setVisibility(View.GONE);
resultView.setVisibility(View.VISIBLE);
}
// Put up our own UI for how to handle the decodBarcodeFormated contents.
private void handleDecodeInternally(Result rawResult, ResultHandler resultHandler, Bitmap barcode) {
onPause();
showResults();
ImageView barcodeImageView = (ImageView) findViewById(R.id.barcode_image_view);
if (barcode == null) {
barcodeImageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.skyers));
} else {
barcodeImageView.setImageBitmap(barcode);
}
TextView formatTextView = (TextView) findViewById(R.id.format_text_view);
formatTextView.setText(rawResult.getBarcodeFormat().toString());
TextView typeTextView = (TextView) findViewById(R.id.type_text_view);
typeTextView.setText(resultHandler.getType().toString());
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
String formattedTime = formatter.format(new Date(rawResult.getTimestamp()));
TextView timeTextView = (TextView) findViewById(R.id.time_text_view);
timeTextView.setText(formattedTime);
TextView metaTextView = (TextView) findViewById(R.id.meta_text_view);
View metaTextViewLabel = findViewById(R.id.meta_text_view_label);
metaTextView.setVisibility(View.GONE);
metaTextViewLabel.setVisibility(View.GONE);
Map<ResultMetadataType, Object> metadata = rawResult.getResultMetadata();
if (metadata != null) {
StringBuilder metadataText = new StringBuilder(20);
for (Map.Entry<ResultMetadataType, Object> entry : metadata.entrySet()) {
if (DISPLAYABLE_METADATA_TYPES.contains(entry.getKey())) {
metadataText.append(entry.getValue()).append('\n');
}
}
if (metadataText.length() > 0) {
metadataText.setLength(metadataText.length() - 1);
metaTextView.setText(metadataText);
metaTextView.setVisibility(View.VISIBLE);
metaTextViewLabel.setVisibility(View.VISIBLE);
}
}
TextView contentsTextView = (TextView) findViewById(R.id.contents_text_view);
CharSequence displayContents = resultHandler.getDisplayContents();
contentsTextView.setText(displayContents);
// Crudely scale betweeen 22 and 32 -- bigger font for shorter text
int scaledSize = Math.max(22, 32 - displayContents.length() / 4);
contentsTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, scaledSize);
}
}
这是我的ResultHandler的代码
package com.skyers.jwetherell.quick_response_code.result;
import android.app.Activity;
import com.skyers.google.zxing.Result;
import com.skyers.google.zxing.client.result.ParsedResult;
import com.skyers.google.zxing.client.result.ParsedResultType;
public abstract class ResultHandler {
private final ParsedResult result;
private final Activity activity;
private final Result rawResult;
ResultHandler(Activity activity, ParsedResult result) {
this(activity, result, null);
}
ResultHandler(Activity activity, ParsedResult result, Result rawResult) {
this.result = result;
this.activity = activity;
this.rawResult = rawResult;
}
public ParsedResult getResult() {
return result;
}
Activity getActivity() {
return activity;
}
public Result getRawResult() {
return rawResult;
}
public boolean areContentsSecure() {
return false;
}
public CharSequence getDisplayContents() {
String contents = result.getDisplayResult();
return contents.replace("\r", "");
}
public abstract int getDisplayTitle();
public final ParsedResultType getType() {
return result.getType();
}
}
答案 0 :(得分:0)
你的问题不是很清楚,你必须提供一些源代码来解释你的问题。
您可以使用此库:https://github.com/zxing/zxing/wiki/Scanning-Via-Intent
并在您的活动中:
with Managers as
(
SELECT empid, mgrid, firstname,lastname
FROM HR.Employees as h
where
*******