2014-02-20 64 views
0

我正在开发应用程序内购买项目:以下是应用程序内购买代码。当我点击“购买物品”按钮谷歌在应用程序购买对话框显示和成功付款后,我得到“付款是成功的”。在应用程序购买中禁用Android中的“购买”按钮活动

现在我想在付款成功时填写“购买物品”按钮当我打开此应用程序时自动禁用。

这里是MainActivity代码:

public class MainActivity extends Activity { 

    IInAppBillingService mservice; 
    ServiceConnection connection; 
    String inappid = "android.test.purchased"; // replace this with your in-app 
              // product id 

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

     connection = new ServiceConnection() { 

      @Override 
      public void onServiceDisconnected(ComponentName name) { 
       mservice = null; 
      } 

      @Override 
      public void onServiceConnected(ComponentName name, IBinder service) { 
       mservice = IInAppBillingService.Stub.asInterface(service); 
      } 
     }; 

     bindService(new Intent(
      "com.android.vending.billing.InAppBillingService.BIND"), 
      connection, Context.BIND_AUTO_CREATE); 

     Button purchaseBtn = (Button) findViewById(R.id.purchase); 
     purchaseBtn.setOnClickListener(new OnClickListener() { 

      @Override 
       public void onClick(View v) { 
        ArrayList skuList = new ArrayList(); 
        skuList.add(inappid); 
        Bundle querySkus = new Bundle(); 
        querySkus.putStringArrayList("ITEM_ID_LIST", skuList); 
        Bundle skuDetails; 
        try { 
         skuDetails = mservice.getSkuDetails(3, getPackageName(), 
         "inapp", querySkus); 

         int response = skuDetails.getInt("RESPONSE_CODE"); 
         if (response == 0) { 
          ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST"); 

          for (String thisResponse : responseList) { 
           JSONObject object = new JSONObject(thisResponse); 
           String sku = object.getString("productId"); 
           String price = object.getString("price"); 
           if (sku.equals(inappid)) { 
            System.out.println("price " + price); 
            Bundle buyIntentBundle = mservice.getBuyIntent(3, getPackageName(), sku, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ"); 
            PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); 
            startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); 
           } 
          } 
         } 
        } 
        catch (RemoteException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        catch (SendIntentException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 1001) { 
      String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); 

      if (resultCode == RESULT_OK) { 
       try { 
        JSONObject jo = new JSONObject(purchaseData); 
        String sku = jo.getString(inappid); 
        Toast.makeText(MainActivity.this, "You have bought the " + sku + ". Excellent choice,adventurer!", Toast.LENGTH_LONG).show(); 
       } 
       catch (JSONException e) { 
        System.out.println("Failed to parse purchase data."); 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

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

回答

0

我觉得你购买的结果上onActivityResult,所以在代码中设置点击您的按钮,虚假与下面的代码:

purchaseBtn.setEnabled(false); 

你可以改变你的按钮的背景,这使得更好的视觉效果,如灰色输出

所以你的代码必须如下所示:

if (resultCode == RESULT_OK) { 
      try { 
       JSONObject jo = new JSONObject(purchaseData); 
       String sku = jo.getString(inappid); 
       Toast.makeText(
         MainActivity.this, 
         "You have bought the " + sku 
           + ". Excellent choice,adventurer!", 
         Toast.LENGTH_LONG).show(); 

      // added this two line ///// 

      purchaseBtn.setEnabled(false); 
      purchaseBtn.setBackGroundColor(Color.GRAY); 


      } catch (JSONException e) { 
       System.out.println("Failed to parse purchase data."); 
       e.printStackTrace(); 
      } 
     } 

并且定义了purchaseBtn你可以在你的类的顶端找到这个方法。

,如果你想为你需要保存一个标志,以分享偏好或数据库或从互联网上检查所有的时间关闭按钮,我写了SP代码对你:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putBoolean("isPurchase",true); 
    editor.commit(); 

onCreate方法需要拿到检查值:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(etApplicationContext()); 
    boolean isPurchase = preferences.getBoolean("isPurchase",false); 
    if(isPurchase) 
    { 
    // disable your button 
    } 
+0

谢谢先生的回复。现在,如果我再次打开此应用程序,我会禁用此按钮? –

+0

看到我的编辑禁用后重新打开应用程序 –

0

“购买物品” 按钮自动禁用当我打开这个应用程序

意味着你需要首先知道项目已购买或不禁用或启用购买button.For这种使用mService.getPurchases这回你已经被用户购买的所有物品:

Bundle ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null); 

现在,如果项目已经存在在ownedItems然后禁用购买按钮,否则启用它。

欲了解更多信息,请参阅Querying for Purchased Items

+0

我已经加入 \t \t尝试{ \t \t \t捆绑ownedItems = mservice.getPurchases(3 getPackageName(), \t \t \t \t \t “应用程式内”,NULL); \t \t \t int response = ownedItems.getInt(“RESPONSE_CODE”); \t \t \t如果(响应== 0){ \t \t \t \t purchaseBtn。的setEnabled(假); \t \t \t} \t \t}赶上(RemoteException的E1){ \t \t \t // TODO自动生成的catch程序块 \t \t \t e1.printStackTrace(); \t \t} onCreate()方法。现在我无法朗姆酒申请。我得到错误。 –

+0

@AnandSingh:你在哪?并尝试为'for(String key:ownedItems.keySet()){ Object value = ownedItems.get(key); Log.d(TAG,String.format(“%s%s(%s)”,key, value.toString(),value.getClass()。getName())); }' –