问题
I am working on an android app which facilitate payment through credit card for that I am using CARD.IO SDK for android.
I have integrated the card.io sdk in my code but when I launch the app it's not allowing me to scan any card.It showing a message this device can not use camera to read card numbers
Here is my code:
package org.my.scanExample;
import io.card.payment.CardIOActivity;
import io.card.payment.CreditCard;
import org.my.scanExample.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MyScanActivity extends Activity
{
// You MUST register with card.io to get an app token. Go to https://card.io/apps/new/
private static final String MY_CARDIO_APP_TOKEN = "app_id";
private View v;
final String TAG = getClass().getName();
private Button scanButton;
private TextView resultTextView;
private int MY_SCAN_REQUEST_CODE = 100; // arbitrary int
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
resultTextView = (TextView)findViewById(R.id.resultTextView);
scanButton = (Button)findViewById(R.id.scanButton);
}
@Override
protected void onResume() {
super.onResume();
resultTextView.setText("card.io library version: " + CardIOActivity.sdkVersion() + "\nBuilt: " + CardIOActivity.sdkBuildDate());
if (CardIOActivity.canReadCardWithCamera(this)) {
scanButton.setText("Scan a credit card with card.io");
}
else {
scanButton.setText("Enter credit card information");
onScanPress(v);
}
}
public void onScanPress(View v) {
// This method is set up as an onClick handler in the layout xml
// e.g. android:onClick="onScanPress"
Intent scanIntent = new Intent(this, CardIOActivity.class);
// required for authentication with card.io
scanIntent.putExtra(CardIOActivity.EXTRA_APP_TOKEN, MY_CARDIO_APP_TOKEN);
// customize these values to suit your needs.
scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); // default: true
scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false
scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_ZIP, false); // default: false
// hides the manual entry button
// if set, developers should provide their own manual entry mechanism in the app
scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); // default: false
// MY_SCAN_REQUEST_CODE is arbitrary and is only used within this activity.
startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String resultStr;
if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);
// Never log a raw card number. Avoid displaying it, but if necessary use getFormattedCardNumber()
resultStr = "Card Number: " + scanResult.getRedactedCardNumber() + "\n";
// Do something with the raw number, e.g.:
// myService.setCardNumber( scanResult.cardNumber );
if (scanResult.isExpiryValid()) {
resultStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n";
}
if (scanResult.cvv != null) {
// Never log or display a CVV
resultStr += "CVV has " + scanResult.cvv.length() + " digits.\n";
}
if (scanResult.zip != null) {
resultStr += "Zip: " + scanResult.zip + "\n";
}
}
else {
resultStr = "Scan was canceled.";
}
resultTextView.setText(resultStr);
}
}
Exception:
Failed to load native library: couldn't load cardIODecider : indLibrary returned null.
-processor type is not supported
cardIoScanErrorNoDeviceSupport
回答1:
Typically this happens when the native libraries are not in the project's libs directory. The structure should look as follows, which will happen if you unzip the sdk into your project's directory.
$ ls libs/*
libs/card.io.jar
libs/armeabi:
libcardioDecider.so
libs/armeabi-v7a:
libcardioDecider.so libcardioRecognizer.so libcardioRecognizer_tegra2.so libopencv_core.so libopencv_imgproc.so
libs/mips:
libcardioDecider.so
libs/x86:
libcardioDecider.so
来源:https://stackoverflow.com/questions/14868766/android-card-io-sdk-showing-this-device-can-not-use-camera-to-read-card-numbers