1

ZXINGライブラリを使用してQRコードで文字列をエンコードしようとしています。これは、これに対応するコード行です:

Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent("com.google.zxing.client.android.ENCODE");
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.putExtra("ENCODE_TYPE", "TEXT_TYPE");
            intent.putExtra("ENCODE_DATA","HELLO WORLD");
            startActivityForResult(intent, 0);

        }
    });
}

ボタンをクリックした後、「強制終了」します

いくつかの Web サイトを調べたところ、これらの行だけで機能すると言われています。残念ながら、それは私のためではありません。

それを機能させるためのアドバイスをお願いします。または、QRCode ジェネレーターを私の ANDROID アプリに統合する他の方法があれば、それも素晴らしいでしょう。

4

3 に答える 3

4

Enzo、これはそれを機能させる別の方法です。これを試してください:

private void encode(String uniqueID) {
        // TODO Auto-generated method stub
         BarcodeFormat barcodeFormat = BarcodeFormat.QR_CODE;

            int width0 = 500;
            int height0 = 500;

            int colorBack = 0xFF000000;
            int colorFront = 0xFFFFFFFF;

            QRCodeWriter writer = new QRCodeWriter();
            try
            {
                EnumMap<EncodeHintType, Object> hint = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
                hint.put(EncodeHintType.CHARACTER_SET, "UTF-8");
                BitMatrix bitMatrix = writer.encode(uniqueID, barcodeFormat, width0, height0, hint);
                int width = bitMatrix.getWidth();
                int height = bitMatrix.getHeight();
                int[] pixels = new int[width * height];
                for (int y = 0; y < height; y++)
                {
                    int offset = y * width;
                    for (int x = 0; x < width; x++)
                    {

                        pixels[offset + x] = bitMatrix.get(x, y) ? colorBack : colorFront;
                    }
                }

                Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
                ImageView imageview = (ImageView)findViewById(R.id.qrCode);
                imageview.setImageBitmap(bitmap);
            } catch (WriterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
于 2013-01-13T01:02:50.807 に答える
0

この行:

Intent intent = new Intent("com.google.zxing.client.android.ENCODE");

インテントで呼び出しているアクティビティを識別します。それが機能するためには、Activity がデバイス上に存在する必要があります。プロジェクト内にアクティビティを実装していない (つまりENCODE、パッケージ内にクラスがないcom.google.zxing.client.android) 場合は、自分のプロジェクトから外部アプリケーションを呼び出すことになります。ブロードキャストに応答するデバイス/エミュレーターにアプリケーションがない場合、このソリューションでcom.google.zxing.client.android.ENCODEうまくいきません。

応答するアプリケーションをインストールするcom.google.zxing.client.android.ENCODEか、別の方法を見つける必要があります。

アプリケーション内でzxing ライブラリを使用して、バーコードを自分で生成することができます。いくつかのダウンロードについては、Google Codeのプロジェクトをご覧ください。これにより、既存の外部アプリケーションへの依存がなくなり、より完全なソリューションが提供されます。

于 2013-01-02T17:42:22.693 に答える