6

私はAndroidアプリケーションを完成させようとしています。今では有料アプリケーション用のAndroidマーケットに自分のアプリケーションをアップロードしたいと考えています。そのために私はAndroidのサイトからドキュメントを読みました:Androidアプリケーションのライセンスを取得するには?

android licensing

しかし、私は、そのようなライセンスを行っている任意のデモやプロジェクトを見てみたいです。私はmainactivityのアンドロイドデベロッパーサイトのデモを見てきました。しかし、そこにハンドラがあり、プロジェクトの動きにそのコードを実装したいのです。 mymainactivityには、アプリケーションの開始時にスプラッシュ画面があり、そのハンドラを1つ設定しました。そのため、私たちのアプリケーションでライセンスを実装する方法を知るためには、例が必要です。

私が知りたいもう一つのことは、有料のアプリケーションをAndroidマーケットにアップロードするためにAndroidのライセンスを実装することが強制されることですか?

Androidアプリケーションのライセンスを実装せずにアプリケーションを有料で設定することはできますか?
利用可能なデモがある場合は、そのリンクを教えてください。

+0

ここに私の質問を参照してください私は同じ機能と活動のコードもそこに貼り付けたいhttp://stackoverflow.com/questions/16169622/android-licensing-application-not-works – Khan

答えて

19

作業を開始する前に、ここで説明したように、あなたのプロジェクトでのライセンスのライブラリが含まれている行います Licensing Your Applications | Android Developers

  1. をLicenseCheck.java

  2. と呼ばれるプロジェクトで新しい活動には、以下を貼り付けてくださいそのアクティビティの

    import android.app.Activity; 
    import android.app.AlertDialog; 
    import android.app.Dialog; 
    import android.content.DialogInterface; 
    import android.content.Intent; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.provider.Settings.Secure; 
    import android.widget.Toast; 
    import com.android.vending.licensing.AESObfuscator; 
    import com.android.vending.licensing.LicenseChecker; 
    import com.android.vending.licensing.LicenseCheckerCallback; 
    import com.android.vending.licensing.ServerManagedPolicy; 
    
    /** 
    * NOTES ON USING THIS LICENSE FILE IN YOUR APPLICATION: 
    * 1. Define the package 
    * of you application above 
    * 2. Be sure your public key is set properly @BASE64_PUBLIC_KEY 
    * 3. Change your SALT using random digits 
    * 4. Under AllowAccess, Add your previously used MainActivity 
    * 5. Add this activity to 
    * your manifest and set intent filters to MAIN and LAUNCHER 
    * 6. Remove Intent Filters from previous main activity 
    */ 
    public class LicenseCheck extends Activity { 
    private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 
    @Override 
    public void allow() { 
         if (isFinishing()) { 
             // Don't update UI if Activity is finishing. 
             return; 
    } 
    // Should allow user access. 
    startMainActivity(); 
    
          } 
    
    @Override 
    public void applicationError(ApplicationErrorCode 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. 
        toast("Error: " + errorCode.name()); 
        startMainActivity(); 
    
    } 
    
    @Override 
    public void dontAllow() { 
        if (isFinishing()) { 
         // Don't update UI if Activity is finishing. 
         return; 
        } 
    
        // 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. 
        showDialog(0); 
    } 
    } 
    private static final String BASE64_PUBLIC_KEY = "PLACE YOUR BASE KEY FROM GOOGLE HERE"; 
    private static final byte[] SALT = new byte[] { INPUT 20 RANDOM INTEGERS HERE }; 
    private LicenseChecker mChecker; 
    
    // A handler on the UI thread. 
    
    private LicenseCheckerCallback mLicenseCheckerCallback; 
    private void doCheck() { 
         mChecker.checkAccess(mLicenseCheckerCallback); 
    } 
    
    @Override 
        public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    
    // 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(); 
        } 
    
    @Override 
        protected Dialog onCreateDialog(int id) { 
    // We have only one dialog. 
    return new AlertDialog.Builder(this) 
         .setTitle("Application Not Licensed") 
         .setCancelable(false) 
         .setMessage(
           "This application is not licensed. Please purchase it from Android Market") 
         .setPositiveButton("Buy App", 
           new DialogInterface.OnClickListener() { 
            @Override 
            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() { 
            @Override 
            public void onClick(DialogInterface dialog, 
              int which) { 
             finish(); 
            } 
           }).create(); 
        } 
        @Override 
        protected void onDestroy() { 
    super.onDestroy(); 
    mChecker.onDestroy(); 
        } 
    
        private void startMainActivity() { 
    startActivity(new Intent(this, MainActivity.class)); //REPLACE MainActivity.class WITH YOUR APPS ORIGINAL LAUNCH ACTIVITY 
    finish(); 
        } 
    
        public void toast(String string) { 
    Toast.makeText(this, string, Toast.LENGTH_SHORT).show(); 
        } 
    
    } 
    
  3. Googleの提供するものに基本キーを変更しますd、SALTに20個のランダムな整数を配置し、MainActivity.classをアプリケーションのメインアクティビティに変更します。

  4. 更新

    <!-- Old Launch Activity Here --> 
    <activity android:label="@string/app_name" android:name=".MainActivity" /> 
    <!-- New License Launch Activity with all intent filters from your previous main activity --> 
    <!-- Translucent.NoTitleBar is so that this activity is never shown to the user -->  
    <activity android:label="@string/app_name" android:name=".LicenseCheck" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar"> 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    
  5. はなく、あなたがすべて完了しているアプリケーションタグ

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

でマニフェストタグにパーミッションを追加し、新たな活性を持つマニフェストファイル!パブリッシュする前にテストしてください。 :) :)

+0

私はエラー: "エラー:(48、0)説明com.android.vending.CHECK_LICENSEが無効です"。何故かあなたはなぜ知っている?どうもありがとう。 – cjayem13

関連する問題