2014-02-21 2 views
0

내 응용 프로그램에 문제가 있습니다. 열면 라이센스 통합으로 인해 충돌이 발생합니다. 그러나 나는 문제가 어디 있는지 알지 못한다. 내가 찾도록 도와 줄 수 있니? 나는 매우 감사 할 것이다!Android 애플리케이션에 라이센스를 통합하는 방법은 무엇입니까?

내 주요 acitivity :

package com.example.testouille; 

import com.google.android.vending.licensing.AESObfuscator; 
import com.google.android.vending.licensing.LicenseChecker; 
import com.google.android.vending.licensing.LicenseCheckerCallback; 
import com.google.android.vending.licensing.ServerManagedPolicy; 

import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.provider.Settings.Secure; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.Menu; 

public class MainActivity extends Activity { 

    static final String BASE64_PUBLIC_KEY = "LICENSE"; 
    private static final byte[] SALT = new byte[] { 
      -46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95, -45, 77, -117, -36, -113, -11, 32, -64, 
      89 
     }; 
    private Handler mHandler; 
    private LicenseChecker mChecker; 
    private LicenseCheckerCallback mLicenseCheckerCallback; 
    boolean licensed; 
    boolean checkingLicense; 
    boolean didCheck; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



private void doCheck() { 

    didCheck = false; 
    checkingLicense = true; 
    setProgressBarIndeterminateVisibility(true); 

    mChecker.checkAccess(mLicenseCheckerCallback); 
} 


private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 

    @Override 
    public void allow(int reason) { 

     if (isFinishing()) { 

      return; 
     }    
     Log.i("License","Accepted!");  



     licensed = true; 
     checkingLicense = false; 
     didCheck = true; 

    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public void dontAllow(int reason) { 

     if (isFinishing()) { 

       return; 
      } 
      Log.i("License","Denied!"); 
      Log.i("License","Reason for denial: "+reason);                    



      licensed = false; 
      checkingLicense = false; 
      didCheck = true;    

      showDialog(0); 

    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public void applicationError(int reason) { 

     Log.i("License", "Error: " + reason); 
     if (isFinishing()) { 

      return; 
     } 
     licensed = true; 
     checkingLicense = false; 
     didCheck = false; 

     showDialog(0); 
    } 


} 

protected Dialog onCreateDialog(int id) { 

    return new AlertDialog.Builder(this) 
      .setTitle("UNLICENSED APPLICATION DIALOG TITLE") 
      .setMessage("This application is not licensed, please buy it from the play store.") 
      .setPositiveButton("Buy", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(
          "http://market.android.com/details?id=" + getPackageName())); 
        startActivity(marketIntent); 
        finish(); 
       } 
      }) 
      .setNegativeButton("Exit", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 
       } 
      }) 
      .setNeutralButton("Re-Check", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        doCheck(); 
       } 
      }) 

      .setCancelable(false) 
      .setOnKeyListener(new DialogInterface.OnKeyListener(){ 
       public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) { 
        Log.i("License", "Key Listener"); 
        finish(); 
        return true; 
       } 
      }) 
      .create(); 
}{ 
    String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 
    Log.i("Device Id", deviceId); 
    mHandler = new Handler(); 
    mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
    mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)), BASE64_PUBLIC_KEY); 
}} 

내 로그 캣 :

02-21 15:00:06.530: D/AndroidRuntime(1231): Shutting down VM 
02-21 15:00:06.530: W/dalvikvm(1231): threadid=1: thread exiting with uncaught exception (group=0xb3ab8ba8) 
02-21 15:00:06.550: E/AndroidRuntime(1231): FATAL EXCEPTION: main 
02-21 15:00:06.550: E/AndroidRuntime(1231): Process: com.example.testouille, PID: 1231 
02-21 15:00:06.550: E/AndroidRuntime(1231): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.testouille/com.example.testouille.MainActivity}: java.lang.NullPointerException 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.os.Handler.dispatchMessage(Handler.java:102) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.os.Looper.loop(Looper.java:136) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at dalvik.system.NativeStart.main(Native Method) 
02-21 15:00:06.550: E/AndroidRuntime(1231): Caused by: java.lang.NullPointerException 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:99) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at com.example.testouille.MainActivity.<init>(MainActivity.java:152) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at java.lang.Class.newInstanceImpl(Native Method) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at java.lang.Class.newInstance(Class.java:1208) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112) 
02-21 15:00:06.550: E/AndroidRuntime(1231):  ... 11 more 
02-21 15:00:14.370: I/Process(1231): Sending signal. PID: 1231 SIG: 9 
02-21 15:01:30.460: D/AndroidRuntime(1251): Shutting down VM 
02-21 15:01:30.470: W/dalvikvm(1251): threadid=1: thread exiting with uncaught exception (group=0xb3ab8ba8) 
02-21 15:01:30.530: E/AndroidRuntime(1251): FATAL EXCEPTION: main 
02-21 15:01:30.530: E/AndroidRuntime(1251): Process: com.example.testouille, PID: 1251 
02-21 15:01:30.530: E/AndroidRuntime(1251): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.testouille/com.example.testouille.MainActivity}: java.lang.NullPointerException 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.os.Handler.dispatchMessage(Handler.java:102) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.os.Looper.loop(Looper.java:136) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at dalvik.system.NativeStart.main(Native Method) 
02-21 15:01:30.530: E/AndroidRuntime(1251): Caused by: java.lang.NullPointerException 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:99) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at com.example.testouille.MainActivity.<init>(MainActivity.java:152) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at java.lang.Class.newInstanceImpl(Native Method) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at java.lang.Class.newInstance(Class.java:1208) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112) 
02-21 15:01:30.530: E/AndroidRuntime(1251):  ... 11 more 
02-21 15:01:33.890: I/Process(1251): Sending signal. PID: 1251 SIG: 9 

내가 안드로이드에 자바에서 "멍청한 놈"입니다 ^^. 고마워요, David

+1

logcat에서 스택 추적을 게시하십시오. – Simon

+0

괜찮습니다. 고마워요. – user3152141

답변

0

내가 생각할 수있는 유일한 점은 응용 프로그램에 실행 권한이 없다는 것입니다.하지만 나는 하하보다 훨씬 뛰어나다 고 생각합니다.

+0

답변 해 주셔서 감사합니다. 불행히도 이미 허가 ^^. – user3152141

1

당신이나 다른 사람이 이런 식으로 코드에 문제가 있다면 꽤 오랫동안 오류가 발생하여 사용하지 못하게 할 수있는 대화 상자를 만들 수 있습니다. 좋은 라이센스 응답.

protected Dialog onCreateDialog(int id) { 

return new AlertDialog.Builder(this) 

이 클래스의 그것의 자신의 클래스와 노트에 있기 때문에

class MainActivity extends Activity 

당신은에 AlertDialog.Builder이 문맥을 필요로하기 때문에 "이", 당신은 뭔가를해야 사용할 수 없습니다 :

protected Dialog onCreateDialog(int id) { 

new AlertDialog.Builder(getApplicationContext()) 

또 다른 옵션은 당신이 단순히를 사용할 수있는 MainActivity에 공개 컨텍스트 변수를 확인하는 것입니다.

클래스 MainActivity extends Activity {

공개 컨텍스트 컨텍스트;

protected Dialog onCreateDialog(int id) { 

new AlertDialog.Builder(context) 

나는 그것이 나에게 투표를하시기 바랍니다 않으면 내가 시작할 수 있습니다,이 사람을 도움이되기를 바랍니다 : 당신이 대화 상자를 만드는 곳이 같은 MainActivity에서 공용 컨텍스트를 사용할 수 아래로 그리고

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    this.context = this; 
} 

의견 및 기타 사항을 작성합니다.