Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用内计费,禁用和启用基于高级购买的editText_Android_In App Billing - Fatal编程技术网

Android 应用内计费,禁用和启用基于高级购买的editText

Android 应用内计费,禁用和启用基于高级购买的editText,android,in-app-billing,Android,In App Billing,我仍然无法理解这个应用程序内账单。我的想法是,在升级premium之前,我不能在EditText中键入任何内容。没有错误(应用程序运行得很好),但我肯定在某个地方犯了一个逻辑错误,因为在高级购买之后,变量mpremim应该等于1(如果没有高级,mpremim==0)。任何帮助都将不胜感激 public class MainActivity extends Activity { private static final String TAG = "com.dt.tryout4"; EditTex

我仍然无法理解这个应用程序内账单。我的想法是,在升级premium之前,我不能在EditText中键入任何内容。没有错误(应用程序运行得很好),但我肯定在某个地方犯了一个逻辑错误,因为在高级购买之后,变量mpremim应该等于1(如果没有高级,mpremim==0)。任何帮助都将不胜感激

public class MainActivity extends Activity {

private static final String TAG = "com.dt.tryout4";
EditText txtIncome;
KeyListener mKeyListener;
IabHelper mHelper;
int mPremium;
static final String ITEM_SKU = "android.test.purchased";
Button upgrade;
TextView txtTest;
SharedPreferences sp;

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

    sp = getPreferences(MODE_PRIVATE);
    mPremium = sp.getInt("premium", 0);
    txtTest = (TextView) findViewById(R.id.textTest);
    txtTest.setText(Integer.toString(mPremium));

    txtIncome = (EditText) findViewById(R.id.textIncome);
    mKeyListener = txtIncome.getKeyListener();
    if (mPremium==0)
    {
        txtIncome.setKeyListener(null);
    }
    else if(mPremium==1)
    {
        txtIncome.setKeyListener(mKeyListener);
    }


    upgrade = (Button) findViewById(R.id.btnUpgrade);

    String base64EncodedPublicKey =
            "<your license key here>";

    mHelper = new IabHelper(this, base64EncodedPublicKey);

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
                                   public void onIabSetupFinished(IabResult result)
                                   {
                                       if (!result.isSuccess()) {
                                           Log.d(TAG, "In-app Billing setup failed: " +
                                                   result);
                                       } else {
                                           Log.d(TAG, "In-app Billing is set up OK");
                                       }
                                   }
                               });
}

public void premiumUpgrade (View view)
{
    try {
        mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001, mPurchaseFinishedListener, "mypurchasetoken");
    } catch (IabHelper.IabAsyncInProgressException e) {
        e.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data)
{
    if (!mHelper.handleActivityResult(requestCode,
            resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
        = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result,
                                      Purchase purchase)
    {
        if (result.isFailure()) {
            return;
        }
        else if (purchase.getSku().equals(ITEM_SKU)) {
            upgrade.setEnabled(false);
            mPremium=1;
            saveData();
        }

    }
};

public void saveData()
{
    SharedPreferences.Editor spe = getPreferences(MODE_PRIVATE).edit();
    spe.putInt("premium", mPremium);
    spe.apply();
}


public static boolean verifyPurchase(String base64PublicKey,
                                     String signedData, String signature) {
    if (TextUtils.isEmpty(signedData) ||
            TextUtils.isEmpty(base64PublicKey) ||
            TextUtils.isEmpty(signature)) {
        Log.e(TAG, "Purchase verification failed: missing data.");
        if (BuildConfig.DEBUG) {
            return true;
        }
        return false;
    }

    PublicKey key = Security.generatePublicKey(base64PublicKey);
    return Security.verify(key, signedData, signature);
}
公共类MainActivity扩展活动{
私有静态最终字符串TAG=“com.dt.tryout4”;
编辑文本TXT收入;
键侦听器mKeyListener;
艾伯曼帮助者;
国际货币基金组织;
静态最终字符串项\u SKU=“android.test.purchased”;
按钮升级;
TextView-txtTest;
共享参考sp;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp=getPreferences(模式\私有);
mPremium=sp.getInt(“溢价”,0);
txtTest=(TextView)findViewById(R.id.textTest);
setText(Integer.toString(mPremium));
txtIncome=(EditText)findViewById(R.id.textIncome);
mKeyListener=txtIncome.getKeyListener();
如果(mPremium==0)
{
txtIncome.setKeyListener(空);
}
否则如果(mPremium==1)
{
txtIncome.setKeyListener(mKeyListener);
}
升级=(按钮)findViewById(R.id.btnUpgrade);
字符串base64EncodedPublicKey=
"";
mHelper=新的IABHeloper(此,base64EncodedPublicey);
mHelper.startSetup(新的IabHelper.OnIabSetupFinishedListener(){
已完成公共void ONIBS设置(IAB结果)
{
如果(!result.issucess()){
Log.d(标记“应用内计费设置失败:”+
结果);
}否则{
Log.d(标记“应用内计费设置正常”);
}
}
});
}
公共无效预升级(视图)
{
试一试{
mHelper.launchPurchaseFlow(此,项目_SKU,10001,mppurchaseFinishedListener,“mypurchasetoken”);
}捕获(IabHelper.IabAsyncInProgressException e){
e、 printStackTrace();
}
}
@凌驾
ActivityResult上受保护的void(int请求代码、int结果代码、,
意图(数据)
{
如果(!mHelper.handleActivityResult)(请求代码,
结果代码,数据){
super.onActivityResult(请求代码、结果代码、数据);
}
}
IabHelper.OnIabPurchaseFinishedListener MPPurchaseFinishedListener
=new IabHelper.OnIabPurchaseFinishedListener(){
public void onIabPurchaseFinished(IabResult,
(购买)
{
if(result.isFailure()){
回来
}
else if(purchase.getSku().equals(ITEM_SKU)){
upgrade.setEnabled(false);
mPremium=1;
saveData();
}
}
};
公共void saveData()
{
编辑器spe=getPreferences(MODE_PRIVATE).edit();
spe.putInt(“溢价”,mPremium);
spe.apply();
}
公共静态布尔验证购买(基于字符串的64公钥,
字符串签名数据,字符串签名){
if(TextUtils.isEmpty(signedData)||
TextUtils.isEmpty(base64PublicKey)||
TextUtils.isEmpty(签名)){
Log.e(标记“采购验证失败:缺少数据”);
if(BuildConfig.DEBUG){
返回true;
}
返回false;
}
PublicKey key=Security.generatePublicKey(base64PublicKey);
返回安全性。验证(密钥、签名数据、签名);
}

这是我的最新答案。显然,您必须延迟可运行的r,以便您的手机/模拟器能够正确处理购买。因此,如果购买成功,您应该添加以下代码:

Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        txtIncome.setEnabled(true);
                        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                        SharedPreferences.Editor editor = preferences.edit();
                        editor.putBoolean("isPurchase",true);
                        editor.commit();
                    }
                }, 4000);
然后,您可以在onCreate中添加以下内容:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    boolean isPurchase = preferences.getBoolean("isPurchase", false);
    if(isPurchase==true)
    {
        txtIncome.setEnabled(true);
    }
    else
    {
        txtIncome.setEnabled(false);
    }

编辑文本的输入类型是什么?就像我尝试了所有的方法,包括.setEnabled、.setInputType、.setFocusable,但是没有任何效果。