3

電話でzxing libを使用している3つの異なるアプリケーションがあるとしましょう。自分のアプリケーションで zxing を開きたいときはいつでも、アプリ 1、アプリ 2、または自分のアプリを使用してアクションを完了するかどうかを Android から尋ねられます。ダイアログなしで自分のアプリだけで強制的に実行するにはどうすればよいですか? それを行う機会はありますか?

編集

CommonsWare に加えて、他のアクティビティでバーコードの結果を処理したい場合は、それを行うことができます。

ステップ 1: Capture アクティビティの handleDecode というメソッドにジャンプします。これらの行を handleDecodeInternally(rawResult, resultHandler, バーコード); の後に追加します。

Intent intent = new Intent(getIntent().getAction());
intent.putExtra("SCAN_RESULT", rawResult.getText());
setResult(RESULT_OK,intent);
finish();

ステップ 2: 他のアクティビティの onActivityResult イベントでやりたいことを何でもします。

PS: CommonsWare に感謝します。

4

4 に答える 4

7

まず、「zxing lib」がありません。バーコード スキャナー アプリケーションを使用し、理想的にはそのコードを使用して、アクティビティ レベルでアプリケーションに結び付ける必要がありますIntentIntegratorこれを示すサンプル アプリケーションを次に示します。ZXing の作成者は、バーコード スキャナーのソース コードを別のアプリケーションに焼き付けることを明確にサポートまたは推奨していません。

ただし、あなたの症状を考えると、バーコード スキャナーのソース コードを独自のアプリケーションに追加しようとしていると思わざるを得ません。

おそらく、スキャン アクティビティの要素のマニフェストに次のようなものがあります。

        <intent-filter >
            <action android:name="com.google.zxing.client.android.SCAN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

あなたはバーコード スキャナーではありません。しかし、これ<intent-filter>はあなたがバーコード スキャナーであると主張しています。

この を削除し<intent-filter>、バーコード スキャナーのソース コードのコピーを変更してそれを必要としないようにしてから、コンポーネント ベースのIntentコンストラクター (例: new Intent(this, ThisIsYourRevisedScanningActivity.class)) を使用してスキャン アクティビティを開始する必要があります。

于 2012-07-19T11:27:09.850 に答える
4

これを含めるだけで、これで私に必要なことができました..

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage(getPackageName());
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(intent, 0);
于 2014-01-29T08:28:03.347 に答える
0

Androidでは、これを自分で設定することはできません。アクションのデフォルトアプリケーションを設定できるのはユーザーのみです。携帯電話でそのイベントをアプリで処理する場合は、ピッカーでアプリを選択する前に、[デフォルトとして使用]チェックボックスをオンにします。

セキュリティ上の理由から、Androidでは、ユーザーの操作なしにアプリをデフォルトとして設定することはできません。悪意のあるアプリが、さまざまなイベントのデフォルトとして自分自身を結び付ける可能性があるためです。

于 2012-07-19T11:21:54.597 に答える
0

実際には、CommonsWare が言ったようにインテントフィルターを削除する必要があるため、次のようにする必要があります。

<activity
       android:name="com.google.zxing.client.android.CaptureActivity"
       android:screenOrientation="landscape"
       android:configChanges="orientation|keyboardHidden"
       android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
       android:windowSoftInputMode="stateAlwaysHidden">
</activity>

外部インテントを介して呼び出す代わりに、次のように zxing を呼び出す必要があります。

private final static int ACTION_ZXING_SCANNER = 0x0000c0de; //IntentIntegrator.REQUEST_CODE
private void startZxingScanner() {
    final Intent intent = new Intent(this, com.google.zxing.client.android.CaptureActivity.class);
    intent.setAction(Intents.Scan.ACTION);
    startActivityForResult(intent, ACTION_ZXING_SCANNER);
}

そして、onActivityResult()リクエストコードを使用して結果を処理しますACTION_ZXING_SCANNER。必要に応じてインポート文字列:

import com.google.zxing.client.android.Intents;

注:これは私にとってはうまくいき、zxingプロジェクトをライブラリとしてプロジェクトに追加したので、ここにあります-「zxing lib」:)

于 2014-06-24T14:03:01.290 に答える