Android In App Billing来自其他活动的访问权限

时间:2014-06-10 00:04:45

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

我的所有In App Billing代码在我的MainActivity上运行良好。 问题是我想从另一个活动访问该代码。

我想要触及的代码在我的主要活动中:

public void buyCode() {
    Log.d(TAG, "2. Button pressed");
    mHelper.launchPurchaseFlow(MainActivity.this, SKU_TEST, 10001,
            mPurchaseFinishedListener, "abc123abc1234");
}

我已尝试在其他活动的OnClickListener上使用此代码,但它无效,结果为NullPointerException

MainActivity myMainActivity = new MainActivity();
myMainActivity.buyCode();

我该如何做到这一点?

由于

1 个答案:

答案 0 :(得分:0)

您不能自己创建活动实例,并期望它表现为系统创建的活动。它不会起作用,因为系统处理所有生命周期事件,如创建,开始,停止,暂停等。

您需要为应用内付款设置专门的活动,或者您需要将mHelper嵌入到每个活动中以执行购买(这不太可取)。

在第一种情况下,您的主要活动必须仅负责购买操作和处理结果。然后你可以通过Intent从任何其他活动中调用它。在第二种情况下,您在多个活动中实施相同的购买逻辑(这是个坏主意),您不再需要再调用主要活动。

如果在您的情况下,主要活动比处理应用内付款更多,那么您可以使用额外的标记来调用它,说用户想要购买某些东西。你可以这样做。

// calling activity
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("purchase", true);
startActivity(intent);

// MainActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
    boolean executePurchase = getIntent().getBooleanExtra("purchase", false);
    if (executePurchase) {
        // start purchasing logic
        ...
    } else {
        // continue with the standard logic
        ...
    }
}

MainActivity将在调用活动之前启动,您无法通过当前的设计来避免这种情况。