在应用程序购买保存按钮状态

时间:2015-03-04 05:31:42

标签: android in-app-purchase in-app-billing

我正在尝试使用应用程序内购买开发应用程序,我想做的就是让两个按钮一个用于购买(启用)第二个按钮以在购买后打开活动(首先禁用然后在购买后启用)。 第一个问题是第一个是在购买后保存按钮状态,因为每次重新启动应用程序时它们都会重置。所以我做了一些研究,发现了共享偏好,我确实实现了它,但第二个问题是在实现共享偏好后,按钮状态似乎不正常(在禁用和启用之间)。

请注意,在应用程序中,我有两个按钮,它们执行相同的操作,但是没有进行购买,并且它们在共享首选项下工作正常,但与应用内购买相关联的按钮停止从禁用状态更改其状态购买后启用(购买后保持禁用状态)

这是我的xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainScreen">


<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Activity 1"
    android:id="@+id/act1"
    android:onClick="Activity1"
    android:layout_marginTop="84dp"

    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/buyall"
    android:layout_toStartOf="@+id/buyall"
    android:enabled="false" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Buy Act 1"
    android:id="@+id/buyButton"
    android:onClick="buyClick"
    android:layout_alignTop="@+id/act1"
    android:layout_toRightOf="@+id/act1"
    android:layout_toEndOf="@+id/act1"
    android:layout_marginLeft="45dp"
    android:layout_marginStart="45dp"
    android:enabled="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Activity 2"
    android:id="@+id/act2"
    android:layout_below="@+id/act1"
    android:layout_alignLeft="@+id/act1"
    android:layout_alignStart="@+id/act1"
    android:onClick="Activity2"

    android:enabled="false" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Buy act 2"
    android:id="@+id/buyact2"
    android:layout_alignBottom="@+id/act2"
    android:layout_alignLeft="@+id/buyButton"
    android:layout_alignStart="@+id/buyButton"
    android:onClick="buyAct2"
    android:enabled="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Activity 3"
    android:id="@+id/act3"
    android:layout_below="@+id/act2"
    android:layout_alignLeft="@+id/act2"
    android:layout_alignStart="@+id/act2"
    android:onClick="Activity3"

    android:enabled="false" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Buy act 3"
    android:id="@+id/buyact3"
    android:layout_alignBottom="@+id/act3"
    android:layout_alignLeft="@+id/buyact2"
    android:layout_alignStart="@+id/buyact2"
    android:onClick="buyAct3"
    android:enabled="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Buy all"
    android:id="@+id/buyall"
    android:onClick="buyAll"
    android:enabled="true"
    android:layout_below="@+id/eact4"
    android:layout_centerHorizontal="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ACT 4"
    android:id="@+id/act4"

    android:onClick="ACT4"
    android:layout_below="@+id/act3"
    android:layout_alignLeft="@+id/act3"
    android:layout_alignStart="@+id/act3"
    android:enabled="false" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Enable ACT 4"
    android:id="@+id/eact4"
    android:onClick="EACT4"
    android:layout_below="@+id/buyact3"
    android:layout_alignLeft="@+id/buyact3"
    android:layout_alignStart="@+id/buyact3"
    android:enabled="true" />

那是我的java代码:

    package com.aseng90_test.smiap2;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.aseng90_test.smiap2.util.IabHelper;
import com.aseng90_test.smiap2.util.IabResult;
import com.aseng90_test.smiap2.util.Purchase;


public class MainScreen extends ActionBarActivity {

private static final String TAG = "com.aseng90_test.smiap2";
IabHelper mHelper;
private static final String ITEM_SKU = "com.aseng90_test.smiap2_button555";
private static final String ITEM_SKU2 = "com.aseng90_test.smiap2_buyact222";
private static final String ITEM_SKU3 = "com.aseng90_test.smiap2_buyact333";
private static final String ITEM_SKU4 = "com.aseng90_test.smiap2_buyall_11";








private Button Activity1;
private Button Activity2;
private Button Activity3;

private Button buyButton;
private Button buyAct2;
private Button buyAct3;
private Button buyAll;

private Button EAct4;
private Button Act4;


private SharedPreferences prefs;
private String prefName = "MyPref";


boolean Activity1_isEnabled;
boolean Activity2_isEnabled;
boolean Activity3_isEnabled;
boolean Act4_isEnabled;


boolean buyButton_isEnabled;
boolean buyAct2_isEnabled;
boolean buyAct3_isEnabled;
boolean buyAll_isEnabled;
boolean EAct4_isEnabled;

private static final String Activity1_state = "Activity1_state";
private static final String Activity2_State = "Activity2_state";
private static final String Activity3_State = "Activity3_state";
private static final String buyButton_State = "buyButton_state";
private static final String buyAct2_State = "buyAct2_state";
private static final String buyAct3_State = "buyAct3_state";
private static final String buyAll_State = "buyAll_state";
private static final String Act4_State = "Act4_state";
private static final String EAct4_State = "EAct4_state";


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

    buyButton = (Button) findViewById(R.id.buyButton);
    buyAct2 = (Button) findViewById(R.id.buyact2);
    buyAct3 = (Button) findViewById(R.id.buyact3);
    buyAll = (Button) findViewById(R.id.buyall);


    Activity1 = (Button) findViewById(R.id.act1);
    Activity2 = (Button) findViewById(R.id.act2);
    Activity3 = (Button) findViewById(R.id.act3);



    EAct4 = (Button) findViewById(R.id.eact4);
    Act4 = (Button) findViewById(R.id.act4);


    String base64EncodedPublicKey =
            "";

    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 EACT4(View view) {
    EAct4.setEnabled(false);
    Act4.setEnabled(true);
}

public void ACT4(View view) {
    Toast.makeText(MainScreen.this,
            "ACt4 Clicked", Toast.LENGTH_LONG).show();
}


public void buyClick(View view) {
    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,
            mPurchaseFinishedListener, "mypurchasetoken");
}

public void buyAct2(View view) {
    mHelper.launchPurchaseFlow(this, ITEM_SKU2, 10002, mPurchaseFinishedListener, "buyact2");
}

public void buyAct3(View view) {
    mHelper.launchPurchaseFlow(this, ITEM_SKU3, 10003, mPurchaseFinishedListener, "buyact3");
}

public void buyAll(View view) {
    mHelper.launchPurchaseFlow(this, ITEM_SKU4, 10004, mPurchaseFinishedListener, "buyall");
}


@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()) {
            // Handle error
            return;
        }
        if (purchase.getSku().equals(ITEM_SKU)) {
            Activity1.setEnabled(true);
            buyButton.setEnabled(false);

        }

        if (purchase.getSku().equals(ITEM_SKU2)) {
            Activity2.setEnabled(true);
            buyAct2.setEnabled(false);
        }

        if (purchase.getSku().equals(ITEM_SKU3)) {
            Activity3.setEnabled(true);
            buyAct3.setEnabled(false);
        }

        if (purchase.getSku().equals(ITEM_SKU4)) {
            Activity1.setEnabled(true);
            Activity2.setEnabled(true);
            Activity3.setEnabled(true);

            buyAll.setEnabled(false);
            buyButton.setEnabled(false);
            buyAct2.setEnabled(false);
            buyAct3.setEnabled(false);

        }


    }


};


public void Activity1(View view) {
    startActivity(new Intent(MainScreen.this, Click1.class));

}

public void Activity2(View view) {
    startActivity(new Intent(MainScreen.this, Activity2.class));
}

public void Activity3(View view) {
    startActivity(new Intent(MainScreen.this, Activity3.class));
}


@Override
public void onDestroy() {
    super.onDestroy();
    if (mHelper != null) mHelper.dispose();
    mHelper = null;
}

@Override
protected void onPause(){
    super.onPause();

    if (Act4.isEnabled()){
        Act4_isEnabled = true;
    }
    else {
        Act4_isEnabled = false;
    }


    if (Activity1.isEnabled()){
        Activity1_isEnabled = true;
    }
    else {
        Activity1_isEnabled = false;
    }

    if (Activity2.isEnabled()){
        Activity2_isEnabled = true;
    }
    else {
        Activity2_isEnabled = false;
    }

    if (Activity3.isEnabled()){
        Activity3_isEnabled = true;
    }
    else {
        Activity3_isEnabled = false;
    }

    if (buyButton.isEnabled()){
        buyButton_isEnabled = true;
    }
    else {
        buyButton_isEnabled = false;
    }

    if (buyAct2.isEnabled()){
        buyAct2_isEnabled = true;
    }
    else {
        buyAct2_isEnabled = false;
    }

    if (buyAct3.isEnabled()){
        buyAct3_isEnabled = true;
    }
    else {
        buyAct3_isEnabled = false;
    }

    if (buyAll.isEnabled()){
        buyAll_isEnabled = true;
    }
    else {
        buyAll_isEnabled = false;
    }



    prefs = getSharedPreferences(prefName,MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();

    editor.putString(Activity1_state,this.getLocalClassName());

    editor.putBoolean(Act4_State,Act4_isEnabled);
    editor.putBoolean(EAct4_State,EAct4_isEnabled);
    editor.putBoolean(Activity1_state,Activity1_isEnabled);
    editor.putBoolean(Activity2_State,Activity2_isEnabled);
    editor.putBoolean(Activity3_State,Activity3_isEnabled);
    editor.putBoolean(buyButton_State,buyButton_isEnabled);
    editor.putBoolean(buyAct2_State,buyAct2_isEnabled);
    editor.putBoolean(buyAct3_State,buyAct3_isEnabled);
    editor.putBoolean(buyAll_State,buyAll_isEnabled);
    editor.apply();

}

@Override
protected void onResume(){
    super.onResume();

    prefs = getSharedPreferences(prefName,MODE_PRIVATE);




    Act4.setEnabled(prefs.getBoolean(Act4_State,false));
    Activity1.setEnabled(prefs.getBoolean(Activity1_state,false));
    Activity2.setEnabled(prefs.getBoolean(Activity2_State,false));
    Activity3.setEnabled(prefs.getBoolean(Activity3_State,false));

    EAct4.setEnabled(prefs.getBoolean(EAct4_State,true));
    buyButton.setEnabled(prefs.getBoolean(buyButton_State,true));
    buyAct2.setEnabled(prefs.getBoolean(buyAct2_State,true));
    buyAct3.setEnabled(prefs.getBoolean(buyAct3_State,true));
    buyAll.setEnabled(prefs.getBoolean(buyAll_State,true));
}

所以,如果我的代码中出现问题,是否有任何建议?

非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试从Java部分调用方法,不要使用android:onClick

从xml调用

在共享偏好中使用按钮(购买)状态的默认值为false。

并在此屏幕中将oncreate()方法中的 if 检查实现为:

if(button(buy) state ==false)
{
 //make button(buy) state enable
 //make activity button state disable
}
else
{
//make button(buy) state disable
//make activity button state enable
}

根据应用购买后的结果,使按钮(购买)和活动调用按钮状态为真/假,并根据结果更新共享的prefrence状态