2015-09-07 75 views
0

我想在我的应用程序中实现Card.io,我遵循Card.io网站上的说明,当我进入我的应用程序并启动它时。当我点击按钮时,我打电话给CardIOActivity,但无法打开相机。我有当我点击按钮enter image description here卡io不扫描Android中的信用卡

这是我的清单代码这个画面:

<uses-sdk android:minSdkVersion="8" /> 

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 

<uses-feature 
    android:name="android.hardware.camera" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.camera.autofocus" 
    android:required="false" /> 

<application 
    android:label="card.io example" 
    android:theme="@style/MyTheme" > 
    <activity 
     android:name="MyScanActivity" 
     android:label="card.io example" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="io.card.payment.CardIOActivity" 
     android:configChanges="keyboardHidden|orientation" 
     android:hardwareAccelerated="true" /> 
    <activity 
     android:name="io.card.payment.DataEntryActivity" 
     android:screenOrientation="portrait" /> 
</application> 

,这是我的Java代码

public class MyScanActivity extends Activity { 
final String TAG = getClass().getName(); 

private Button scanButton; 
private TextView resultTextView; 

private int MY_SCAN_REQUEST_CODE = 100; 
@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(); 

    if (CardIOActivity.canReadCardWithCamera()) { 
     scanButton.setText("Scan a credit card with card.io"); 
    } else { 
     scanButton.setText("Enter credit card information"); 
    } 
} 

public void onScanPress(View v) { 

    Intent scanIntent = new Intent(this, CardIOActivity.class); 

    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); 
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); 
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false); 

    scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); 

    scanIntent.putExtra(CardIOActivity.EXTRA_KEEP_APPLICATION_THEME, false); 

    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); 

     resultStr = "Card Number: " + scanResult.getRedactedCardNumber() + "\n"; 

     if (scanResult.isExpiryValid()) { 
      resultStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n"; 
     } 

     if (scanResult.cvv != null) { 

      resultStr += "CVV has " + scanResult.cvv.length() + " digits.\n"; 
     } 

     if (scanResult.postalCode != null) { 
      resultStr += "Postal Code: " + scanResult.postalCode + "\n"; 
     } 
    } else { 
     resultStr = "Scan was canceled."; 
    } 
    resultTextView.setText(resultStr); 

} 

}

我从来没用过卡。 io,我不知道什么是错的。我如何使用Card.io扫描我的签证或其他卡。 如果有人知道解决方案,请帮助我。

+0

看起来是这样的示例应用程序的内容。如果示例应用程序不起作用,请检查日志中是否有错误消息,然后尝试多个设备。 –

回答

0

card.io的要求是:

  • 后置摄像头。
  • Android SDK版本8(Android 2.2)或更高版本。
  • ARMv7处理器。

我猜你的设备没有使用ARMv7处理器。

0

我已经看到你没有点击监听器添加到

scanButton.setOnClickListener(); 

测试此样品

public class CardActivity extends Activity { 

    private int MY_SCAN_REQUEST_CODE = 100; 

    Button scanButton; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.card_io_layout); 

     scanButton = (Button)findViewById(R.id.button); 
     scanButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       onScan(); 
      } 
     }); 
    } 

    private void onScan() { 
    if (CardIOActivity.canReadCardWithCamera()) { 
     Intent scanIntent = new Intent(this, CardIOActivity.class); 
     scanIntent.putExtra(CardIOActivity.EXTRA_APP_TOKEN,"999551db82b04e36b0664ab8217e0624"); 

     scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY,true); 
     scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV,false); 
     scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE,false); 
     scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); 

     startActivityForResult(scanIntent,MY_SCAN_REQUEST_CODE); 
    } 
    else{ 
     //Toast camera not supported So enter card manually 
    } 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == MY_SCAN_REQUEST_CODE) { 
      String resultDisplayString; 
      if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) { 
       CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT); 
       ((EditText)findViewById(R.id.textView)).setText(scanResult.getRedactedCardNumber()); 
      } 
     } 
    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (CardIOActivity.canReadCardWithCamera(this)) { 
      scanButton.setText("Scan a credit card with card.io"); 
     } 
     else { 
      scanButton.setText("Enter credit card information"); 
     } 
    } 
}