2011-11-09 4 views
3

私はAndroidマーケットで自分のアプリのプロキーを購入すると、ユーザーに提供されるプロ機能も含む無料のアプリを持っています。私はプロキーのアプリとメインアプリのもう一つのレシーバーをセットアップしました。ユーザーがメインアプリケーションの「キーの検証」ボタンをクリックすると、インテントがキーアプリの受信者にブロードキャストされ、インテントサービスが起動され、プロキーライセンスが有効かどうかがチェックされます。次に、IntentServiceは、LVLチェックから余分な「応答」を含むメインアプリ受信者にインテントをブロードキャストします。インテントサービスからのLVLライセンスチェック

私はほとんどそこにいます。

W/MessageQueue(2652): java.lang.RuntimeException: Handler{4052de20} sending message to a Handler on a dead thread 
W/MessageQueue(2773): at com.android.vending.licensing.LicenseChecker$ResultListener.verifyLicense(LicenseChecker.java:207) 

任意の提案:私はIntentServiceにLVLチェックを実行しようとしました場合にのみ、私はエラーを得ましたか。

IntentServiceソース:

public class CheckerService extends IntentService { 

private static final byte[] SALT = ....; 
private static final String BASE64_PUBLIC_KEY = ...; 
private String device_id; 

public CheckerService() { 
    super("CheckerService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    SharedPreferences data = getSharedPreferences("data", MODE_PRIVATE); 
    device_id = data.getString("device_id", null); 

    if (device_id == null) { 
     SharedPreferences.Editor editor = data.edit(); 
     device_id = new DeviceId().generate(this); 
     editor.putString("device_id", device_id); 
     editor.commit(); 
    } 

    ServerManagedPolicy smp = new ServerManagedPolicy(this, 
      new AESObfuscator(SALT, getPackageName(), device_id)); 
    LicenseChecker checker = new LicenseChecker(this, smp, BASE64_PUBLIC_KEY); 
    checker.checkAccess(new LicenseCheckerCallback(){ 

     public void allow() { 
      Intent i = new Intent();     
      i.setAction("com.mainapp.intent.action.LICENSE_RESPONSE"); 
      i.putExtra("response", "LICENSE_OK"); 
      sendBroadcast(i); 
     } 

     public void dontAllow() { 
      Intent i = new Intent();     
      i.setAction("com.mainapp.intent.action.LICENSE_RESPONSE"); 
      i.putExtra("response", "LICENSE_NOT_OK"); 
      sendBroadcast(i); 
     } 

     public void applicationError(ApplicationErrorCode errorCode) { 
      Intent i = new Intent();     
      i.setAction("com.mainapp.intent.action.LICENSE_RESPONSE"); 
      i.putExtra("response", "LICENSE_ERROR"); 
      sendBroadcast(i); 
     }}); 

} 


@Override 
public void onDestroy() { 
    super.onDestroy(); 
    checker.onDestroy(); 
} 
} 
+0

これはできましたか?より多くのLVLの例が必要です –

答えて

0

私はこの問題はIntentServiceであると信じています。 IntentServiceは、それ自身のライフサイクルを管理します。基本的に、それは非UIスレッドで実行される単なるサービスです。コールバックが処理される前にサービスが破棄されるため、コールバックが発生したときに 'コールバック'するためのものは存在しません。

START_STICKYまたはSTART_NOT_STICKYを使用してサービスで実行し、ライフサイクルを自分自身で管理できます。

関連する問題