Dungeons のサンプルに基づいて課金サービスを実装しています (これは、Google が推奨する方法です)。次の事実により、少し複雑になります。
- メインのサービス クラスはライブラリ プロジェクトに存在します (コードのスキンを何度も変更したいため)。このstackoverflowの回答は、ライブラリプロジェクトのサービスが問題を引き起こす可能性があることを示唆しているため、サービスを抽象化し、サブプロジェクトで継承しました。これにより、reskin ごとに異なる公開鍵を使用することもできます (これは望ましいことです)。
- 課金がサポートされているかどうかをできるだけ早く知る必要がある UI 要素はたくさんあります。
したがって、最初のアクティビティ実行のメソッドから請求がサポートされているかどうかを確認する関数を呼び出していonCreate()
ます (実際にはすべてのアクティビティですが、プリファレンスが書き込まれるため、これは 1 回だけ発生するはずです)。
Service
Dungeons サンプルでは、請求がサポートされているかどうかを確認するコードが、次のように (クラスから) 請求サービスにバインドしようとします。
boolean bindResult = bindService(
new Intent(Consts.MARKET_BILLING_SERVICE_ACTION),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
この呼び出しは をスローしていNullPointerException
ます。私はかなり注意深くチェックしましたが、これらのどれもnullではありません。どうやらContextWrapper.javaの370行目で、関数内で発生しています。
この他のスタックオーバーフローの回答のために、課金を確認するonCreate()
のは時期尚早かもしれないと思いましたが、ダンジョンのサンプルプロジェクトはここから呼び出しているので、これではないと思います。
Android (3.1) のかなり新しいバージョンを使用しているため、影響がある可能性がありますが、考えられる原因を知りたいです。もう1つ:Eclipseはnullであると言ってcustomIntent
いますが、それが何を指しているのかは完全には明らかではなく、それについてあまり見つけることができませんでした。