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