2013-09-14 3 views
0

Попытка настроить покупки приложений в моем приложении, и это фрагмент. Получил это, работая в деятельности, но изо всех сил пытается превратить его в фрагмент. Если кто-нибудь может увидеть какую-либо ошибку или может помочь мне, это будет здорово. Он просто переходит в действие, не показывающее покупку приложения.Play Store в покупках приложений в фрагменте

Код:

public class Fragment_11 extends Fragment implements OnClickListener { 

private static final String TAG = "BillingService"; 

private Context mContext; 

boolean mIsRegistered = false; 

// this has already been set up for my app at the publisher's console 
static final String IS_REGISTERED = "myregistered"; 

static final int RC_REQUEST = 10001; 

// The helper object 
IabHelper mHelper; 


public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.fragment_1, 
     container, false); 

String base64EncodedPublicKey = "[my public key]"; // (from publisher's console for my app) 

// Create the helper, passing it our context and the public key to verify signatures with 
Log.d(TAG, "Creating IAB helper."); 
mHelper = new IabHelper(getActivity(), base64EncodedPublicKey); 

// enable debug logging (for a production application, you should set this to false). 
mHelper.enableDebugLogging(true); 

// Start setup. This is asynchronous and the specified listener 
// will be called once setup completes. 
Log.d(TAG, "Starting setup."); 
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
    public void onIabSetupFinished(IabResult result) { 
     Log.d(TAG, "Setup finished."); 

     if (!result.isSuccess()) { 
      complain("Problem setting up in-app billing: " + result); 
      return; 
     } 

     // Hooray, IAB is fully set up. Now, let's get an inventory of stuff we own. 
     Log.d(TAG, "Setup successful. Querying inventory."); 
     mHelper.queryInventoryAsync(mGotInventoryListener); 
    } 
}); 

    // Set the onClick listeners 
    view.findViewById(R.id.button1).setOnClickListener(this); 

Button button = (Button) view.findViewById(R.id.button1); 
button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     Intent intent = new Intent(getActivity(), player11.class); 
     getActivity().startActivity(intent); 
    } 
}); 
    Button button2 = (Button) view.findViewById(R.id.button2); 
    button2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(getActivity(), player12.class); 
      getActivity().startActivity(intent); 
     } 
    }); 
     Button button3 = (Button) view.findViewById(R.id.button3); 
     button3.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(getActivity(), player13.class); 
       getActivity().startActivity(intent); 
      } 
     }); 
      Button button4 = (Button) view.findViewById(R.id.button4); 
      button4.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
        Intent intent = new Intent(getActivity(), player14.class); 
        getActivity().startActivity(intent); 
       } 
      }); 
       Button button5 = (Button) view.findViewById(R.id.button5); 
       button5.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View arg0) { 
         // TODO Auto-generated method stub 
         Intent intent = new Intent(getActivity(), player15.class); 
         getActivity().startActivity(intent); 
        } 
       }); 

      return view; 
      } 

      // Listener that's called when we finish querying the items we own 
      IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { 
       public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
        Log.d(TAG, "Query inventory finished."); 
        if (result.isFailure()) { 
         complain("Failed to query inventory: " + result); 
         return; 
        } 

        Log.d(TAG, "Query inventory was successful."); 

        // Do we have the premium upgrade? 
        mIsRegistered = inventory.hasPurchase(IS_REGISTERED); 
        Log.d(TAG, "User is " + (mIsRegistered ? "REGISTERED" : "NOT REGISTERED")); 

        setWaitScreen(false); 
        Log.d(TAG, "Initial inventory query finished; enabling main UI."); 
       } 
      };  

      // User clicked the "Register" button. 
      private void startRegistered() { 
       Log.d(TAG, "Register button clicked; launching purchase flow for upgrade."); 
       setWaitScreen(true); 
       mHelper.launchPurchaseFlow(getActivity(), IS_REGISTERED, RC_REQUEST, mPurchaseFinishedListener); 
      } 

      @Override 
      public void onActivityResult(int requestCode, int resultCode, Intent data) { 
       Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); 

       // Pass on the activity result to the helper for handling 
       if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { 
        // not handled, so handle it ourselves (here's where you'd 
        // perform any handling of activity results not related to in-app billing.. 
        super.onActivityResult(requestCode, resultCode, data); 
       } 
       else { 
        Log.d(TAG, "onActivityResult handled by IABUtil."); 
       } 
      } 

      // Callback for when a purchase is finished 
      IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
       public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
        Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 
        if (result.isFailure()) { 
         // Oh noes! 
         complain("Error purchasing: " + result); 
         setWaitScreen(false); 
         return; 
        } 

        Log.d(TAG, "Purchase successful."); 

        if (purchase.getSku().equals(IS_REGISTERED)) { 
         Log.d(TAG, "User has registered.."); 
         alert("Thank you."); 
         mIsRegistered = true; 
         setWaitScreen(false); 
        } 
       } 
      }; 

      // We're being destroyed. It's important to dispose of the helper here! 
      @Override 
      public void onDestroy() { 
       // very important: 
       Log.d(TAG, "Destroying helper."); 
       if (mHelper != null) mHelper.dispose(); 
       mHelper = null; 
      } 

      void complain(String message) { 
       Log.e(TAG, "**** Register Error: " + message); 
       alert("Error: " + message); 
      } 

      void setWaitScreen(boolean set) { 
       // just a dummy for now 
      } 

      void alert(String message) { 
       AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); 
       bld.setMessage(message); 
       bld.setNeutralButton("OK", null); 
       Log.d(TAG, "Showing alert dialog: " + message); 
       bld.create().show(); 
      } 
      @Override 
      public void onClick(View v) { 
       switch (v.getId()) { 
       case R.id.button1: 
        startRegistered(); 
        break; 
       default: 
        break; 
       } 


    }} 
+1

См. Обсуждение [здесь] (http://stackoverflow.com/questions/14131171/calling-startintentsenderforresult-fromment-android-billing-v3), что может помочь. – AutonomousApps

ответ

1

Возможно проблема в onActivityResult. У меня была проблема в этом. Вы должны переопределить его в действии так же, как и в фрагменте. Если вы не переопределите onActivityResult, он начнет свой суперкласс, и ваш фрагмент не запустит OnIabPurchaseFinishedListener.

+0

Я знаю, что это немного поздно, но как я могу это сделать? – user2407147

+0

Что это значит? – Penzzz

0

У меня была эта проблема. То, что я сделал, - это реализовать покупку в Основной деятельности. Поэтому я отправил SKU на основную деятельность и обработал ее там. Когда покупка закончена, я установил флаговую погоду, которой это удалось или нет. Затем перезапустите фрагмент и установите флажок в функции onresume.

Смежные вопросы