2017-10-18 4 views
-2

을 닫습니다 그들이 모든 자원을 청소하고 관찰자의 등록을 취소하기 구현, 당신을 내가 플레이 결제 응용 프로그램의 예를 만들려고 노력 오전 결제 고객에게

설명했습니다 마지막 단계에서 here

을 설명합니다 BillingClient.endConnection을 호출하면됩니다. 그래서 BillingManager 안쪽이 호출을하는 방법을 정의한 다음 GamePlayActivity.onDestroy에서 호출 :

을 위의 정보에 따라 내가 만든 기능은 BillingManager 자바 클래스에서이 같은 destroy을했다.

public void destroy() { 
     mBillingClient.endConnection(); 
    } 

내 전체 BillingManager 클래스 내 GamePlayActivity가

public class GamePlayActivity extends FragmentActivity implements BillingProvider { 

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

// I want call method here 
    } 

} 

지금 내 게임 플레이 활동에 기능 이상 전화를 원하는 아래처럼
public class BillingManager implements PurchasesUpdatedListener { 
    private final BillingClient mBillingClient; 
    private final Activity mActivity; 
    private static final String TAG = "BillingManager"; 

    public BillingManager(Activity activity) { 

     mActivity = activity; 
     mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build(); 
     mBillingClient.startConnection(new BillingClientStateListener() { 
      @Override 
      public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponse) { 
       if (billingResponse == BillingClient.BillingResponse.OK) { 
        Log.i(TAG, "onBillingSetupFinished() response: " + billingResponse); 
       } else { 
        Log.w(TAG, "onBillingSetupFinished() error code: " + billingResponse); 
       } 
      } 
      @Override 
      public void onBillingServiceDisconnected() { 
       Log.w(TAG, "onBillingServiceDisconnected()"); 
      } 
     }); 
    } 

    public void startPurchaseFlow(final String skuId, final String billingType) { 
     // Specify a runnable to start when connection to Billing client is established 
     Runnable executeOnConnectedService = new Runnable() { 
      @Override 
      public void run() { 
       BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() 
         .setType(billingType) 
         .setSku(skuId) 
         .build(); 
       mBillingClient.launchBillingFlow(mActivity, billingFlowParams); 
      } 
     }; 

     // If Billing client was disconnected, we retry 1 time 
     // and if success, execute the query 
     startServiceConnectionIfNeeded(executeOnConnectedService); 
    } 

    @Override 
    public void onPurchasesUpdated(@BillingClient.BillingResponse int responseCode, 
            List<Purchase> purchases) { 
     Log.d(TAG, "onPurchasesUpdated() response: " + responseCode); 
    } 

    private static final HashMap<String, List<String>> SKUS; 
    static 
    { 
     SKUS = new HashMap<>(); 
     SKUS.put(BillingClient.SkuType.INAPP, Arrays.asList("gas", "premium")); 
     SKUS.put(BillingClient.SkuType.SUBS, Arrays.asList("gold_monthly", "gold_yearly")); 
    } 

    public List<String> getSkus(@BillingClient.SkuType String type) { 
     return SKUS.get(type); 
    } 

    public void querySkuDetailsAsync(@BillingClient.SkuType final String itemType, 
            final List<String> skuList, final SkuDetailsResponseListener listener) { 
     // Specify a runnable to start when connection to Billing client is established 
     Runnable executeOnConnectedService = new Runnable() { 
      @Override 
      public void run() { 
       SkuDetailsParams skuDetailsParams = SkuDetailsParams.newBuilder() 
         .setSkusList(skuList).setType(itemType).build(); 
       mBillingClient.querySkuDetailsAsync(skuDetailsParams, 
         new SkuDetailsResponseListener() { 
          @Override 
          public void onSkuDetailsResponse(int responseCode, 
                  List<SkuDetails> skuDetailsList) { 
           listener.onSkuDetailsResponse(responseCode, skuDetailsList); 
          } 
         }); 
      } 
     }; 

     // If Billing client was disconnected, we retry 1 time 
     // and if success, execute the query 
     startServiceConnectionIfNeeded(executeOnConnectedService); 
    } 

    private void startServiceConnectionIfNeeded(final Runnable executeOnSuccess) { 
     if (mBillingClient.isReady()) { 
      if (executeOnSuccess != null) { 
       executeOnSuccess.run(); 
      } 
     } else { 
      mBillingClient.startConnection(new BillingClientStateListener() { 
       @Override 
       public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponse) { 
        if (billingResponse == BillingClient.BillingResponse.OK) { 
         Log.i(TAG, "onBillingSetupFinished() response: " + billingResponse); 
         if (executeOnSuccess != null) { 
          executeOnSuccess.run(); 
         } 
        } else { 
         Log.w(TAG, "onBillingSetupFinished() error code: " + billingResponse); 
        } 
       } 
       @Override 
       public void onBillingServiceDisconnected() { 
        Log.w(TAG, "onBillingServiceDisconnected()"); 
       } 
      }); 
     } 
    } 

    public void destroy() { 
     mBillingClient.endConnection(); 
    } 
} 

이하와 같다. 나는 그것을 어떻게 불러야할지 모른다.

+1

'새로운 BillingManager(). 파괴()'이 될 것입니다 좋은 시작의 인스턴스를 가지고 가정 ... 하드의 나머지 부분을 보지 않고 대답 이 수업과 어떻게 상호 작용하는지. [mcve] –

+0

@ cricket_007을 제공하십시오. 캐스팅 활동도 함께 수행 할 수 있습니다. –

+0

@AmitVaghela 전체 코드를 추가하십시오. – Priya

답변

2

전화를 GamePlayActivity.onDestroy

에서 문서에 언급하지만 당신은 당신의 자신의 방법을 정의한다.

GamePlayActivity의 onDestroy 메서드를 덮어 쓰고 mBillingClient.endConnection();을 넣습니다.

@Override 
protected void onDestroy() { 
    mBillingClient.endConnection(); 
} 
+0

안녕하세요! 나는 위에 쓰여진 자기 자신의 방법이라고 부르고 싶다 .... 나는 그것을 어떻게 할 수 있는가? – Priya

+0

onDestroy –

+0

@Priya 내에서 다른 destroy 메소드를 호출 할 수도 있습니다. 정말 필요하지 않습니다. 또한 메소드 호출입니다. –

0

나는 당신의 활동은 이미 BillingManager

public class GamePlayActivity extends FragmentActivity implements BillingProvider { 

    BillingManager bm; // assign this in onCreate 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     bm.destroy(); 
    } 

}