2013-09-24 48 views
0

這裏是我的代碼:什麼是應用程序錯誤:6的Android許可

一段時間,我得到應用程序錯誤:3:6有的時候我得到應用不許可的對話框。

public class MainActivity extends Activity { 
    private static final String BASE64_PUBLIC_KEY = "my public key"; 

    // Generate your own 20 random bytes, and put them here. 
    private static final byte[] SALT = new byte[] { 
     -43, 12, 76, -124, -101, -57, 74, -64, 51, 88, -95, -45, 77, -117, -36, -113, -11, 32, -64, 
     89 
    }; 

    private TextView mStatusText; 
    private Button mCheckLicenseButton; 

    private LicenseCheckerCallback mLicenseCheckerCallback; 
    private LicenseChecker mChecker; 
    // A handler on the UI thread. 
    private Handler mHandler; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     setContentView(R.layout.main); 

     mStatusText = (TextView) findViewById(R.id.status_text); 
     mCheckLicenseButton = (Button) findViewById(R.id.check_license_button); 
     mCheckLicenseButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       doCheck(); 
      } 
     }); 

     mHandler = new Handler(); 

     // Try to use more data here. ANDROID_ID is a single point of attack. 
     String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

     // Library calls this when it's done. 
     mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
     // Construct the LicenseChecker with a policy. 
     mChecker = new LicenseChecker(
      this, new ServerManagedPolicy(this, 
       new AESObfuscator(SALT, getPackageName(), deviceId)), 
      BASE64_PUBLIC_KEY); 
     doCheck(); 
    } 

    protected Dialog onCreateDialog(int id) { 
     final boolean bRetry = id == 1; 
     return new AlertDialog.Builder(this) 
      .setTitle(R.string.unlicensed_dialog_title) 
      .setMessage(bRetry ? R.string.unlicensed_dialog_retry_body : R.string.unlicensed_dialog_body) 
      .setPositiveButton(bRetry ? R.string.retry_button : R.string.buy_button, new DialogInterface.OnClickListener() { 
       boolean mRetry = bRetry; 
       public void onClick(DialogInterface dialog, int which) { 
        if (mRetry) { 
         doCheck(); 
        } else { 
         Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(
           "http://play.google.com/store/apps/details?id=com.android.SendEmail")); 
          startActivity(marketIntent);       
        } 
       } 
      }) 
      .setNegativeButton(R.string.quit_button, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 
       } 
      }).create(); 
    } 

    private void doCheck() { 
     mCheckLicenseButton.setEnabled(false); 
     setProgressBarIndeterminateVisibility(true); 
     mStatusText.setText(R.string.checking_license); 
     mChecker.checkAccess(mLicenseCheckerCallback); 
    } 

    private void displayResult(final String result) { 
     mHandler.post(new Runnable() { 
      public void run() { 
       mStatusText.setText(result); 
       setProgressBarIndeterminateVisibility(false); 
       mCheckLicenseButton.setEnabled(true); 
      } 
     }); 
    } 

    private void displayDialog(final boolean showRetry) { 
     mHandler.post(new Runnable() { 
      public void run() { 
       setProgressBarIndeterminateVisibility(false); 
       showDialog(showRetry ? 1 : 0); 
       mCheckLicenseButton.setEnabled(true); 
      } 
     }); 
    }  

    private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
     public void allow(int policyReason) { 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      // Should allow user access. 
      displayResult(getString(R.string.allow)); 
     } 

     public void dontAllow(int policyReason) { 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      displayResult(getString(R.string.dont_allow)); 
      // Should not allow access. In most cases, the app should assume 
      // the user has access unless it encounters this. If it does, 
      // the app should inform the user of their unlicensed ways 
      // and then either shut down the app or limit the user to a 
      // restricted set of features. 
      // In this example, we show a dialog that takes the user to Market. 
      // If the reason for the lack of license is that the service is 
      // unavailable or there is another problem, we display a 
      // retry button on the dialog and a different message. 
      displayDialog(policyReason == Policy.RETRY); 
     } 

     public void applicationError(int errorCode) { 
      if (isFinishing()) { 
       // Don't update UI if Activity is finishing. 
       return; 
      } 
      // This is a polite way of saying the developer made a mistake 
      // while setting up or calling the license checker library. 
      // Please examine the error code and fix the error. 
      String result = String.format(getString(R.string.application_error), errorCode); 
      displayResult(result); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     mChecker.onDestroy(); 
    } 
+0

這裏很不清楚你要找什麼。你能提供一個更全面的問題描述嗎? – Prmths

+0

爲什麼這個錯誤來了 –

+0

其工作正常... Licence_checking權限(manifest.xml)問題 –

回答

1

錯誤代碼6表示您錯過了檢查應用程序清單許可的權限。

<uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 

錯誤代碼3意味着該應用程序是不是在谷歌的市場所以他們的許可證服務器不能確定他們是否應該有一個牌照或沒有。

相關問題