5

GoogleforAndroidのアプリ内課金を初めて使用しています。ただし、ユーザーがインターネット接続を持っていないか、Googleフレームワークがインストールされていない場合(カスタムROMなど)、およびおそらく他の場合(間違った/古い市場バージョンなど)このメソッド(提供されたIabHelperクラス内):

        mContext.bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"),
                         mServiceConn, Context.BIND_AUTO_CREATE);

動作せず、サービスが確立されません。「ActivityManager」からの小さなデバッグ情報を使用して:

12-17 19:58:31.184: W/ActivityManager(76): Unable to start service Intent { act=com.android.vending.billing.InAppBillingService.BIND }: not found

誰かがこのエラーを意味のある方法で「キャッチ」する方法、またはインテント/パッケージが利用可能かどうかを確認するための回避策を見つけましたか?

前もって感謝します。

4

1 に答える 1

9

argh、すぐ後に自分で答えを見つけました:

ここで提案されているようなメソッドを実装して、インテントレシーバーが使用可能かどうかを確認する必要があります:[このインテントを使用できますか-ブログ投稿] [1]

(編集)ただし、元の方法はデフォルトのインテントのみをチェックするため、この方法を請求サービスに適用するには、いくつかの重大な変更が必要です。これは、私たちが望んでいることではありません。

ただし、私の実装は次のようになり、少なくともそれらのデバイス、仕様などで機能するようです。テストしました:(アプリ内課金のV3でのみテスト済み)

public static boolean isBillingAvailable(Context context) {
    final PackageManager packageManager = context.getPackageManager();
    final Intent intent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
    List<ResolveInfo> list = packageManager.queryIntentServices(intent, 0);
    return list.size() > 0;
}
于 2012-12-18T13:10:57.050 に答える