Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用内计费,解锁所有功能_Java_Android_Sqlite - Fatal编程技术网

Java Android应用内计费,解锁所有功能

Java Android应用内计费,解锁所有功能,java,android,sqlite,Java,Android,Sqlite,我按照指南进入应用内购买并解锁所有功能。采购程序很有效。 我解释了我的做法:我在数据库中添加了一个检查,它统计表中记录的数量,如果数量>=1,我在应用程序中打开一个活动进行购买。一旦购买,通过getPurchases方法控制购买,如果完成了,我打开活动,否则我打开活动进行购买。我创建了此代码危险控制,但出现错误: 08-11 18:08:18.120: W/ContextImpl(19293): Implicit intents with startService are not safe:

我按照指南进入应用内购买并解锁所有功能。采购程序很有效。 我解释了我的做法:我在数据库中添加了一个检查,它统计表中记录的数量,如果数量>=1,我在应用程序中打开一个活动进行购买。一旦购买,通过getPurchases方法控制购买,如果完成了,我打开活动,否则我打开活动进行购买。我创建了此代码危险控制,但出现错误:

08-11 18:08:18.120: W/ContextImpl(19293): Implicit intents with startService
 are not safe: Intent {
 act=com.android.vending.billing.InAppBillingService.BIND }
 android.content.ContextWrapper.bindService:529
 main.Elenco_F_Fragment.Controlla_record_per_acquisto:243
 main.Elenco_F_Fragment.access$9:233 
这是第243行:

final boolean blnBind = getActivity().bindService(new Intent(
                "com.android.vending.billing.InAppBillingService.BIND"),
                mServiceConn, Context.BIND_AUTO_CREATE);
这是控件的代码

private void Controlla_record_per_acquisto(){
     SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
    String controllo = "SELECT COUNT(_id) FROM tbf";
    Cursor c = db.rawQuery(controllo, null);

    while (c.moveToNext()){
        int numero_id = c.getInt(0);            

    if(numero_id >=1){  
        // Bind Service
        final boolean blnBind = getActivity().bindService(new Intent(
                "com.android.vending.billing.InAppBillingService.BIND"),
                mServiceConn, Context.BIND_AUTO_CREATE);
        if (!blnBind) return;
        if (mService == null) return;
        Bundle ownedItems;


        try {
            ownedItems = mService.getPurchases(3, getActivity().getPackageName(), "inapp", null);
            Intent intent = null;
            intent = new Intent(getActivity(), Crea_e.class); 
            startActivity(intent);

        } catch (RemoteException e) {
            e.printStackTrace();

            Toast.makeText(context, "getPurchases - fail!", Toast.LENGTH_SHORT).show();
            Log.w(tag, "getPurchases() - fail!");
            return;
        }

        int response = ownedItems.getInt("RESPONSE_CODE");
        Toast.makeText(context, "getPurchases() - \"RESPONSE_CODE\" return " + String.valueOf(response), Toast.LENGTH_SHORT).show();
        Log.i(tag, "getPurchases() - \"RESPONSE_CODE\" return " + String.valueOf(response));

        if (response != 0) return;

        ArrayList<String> ownedSkus = ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");
        ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
        ArrayList<String> signatureList = ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE");
        String continuationToken = ownedItems.getString("INAPP_CONTINUATION_TOKEN");

        Log.i(tag, "getPurchases() - \"INAPP_PURCHASE_ITEM_LIST\" return " + ownedSkus.toString());
        Log.i(tag, "getPurchases() - \"INAPP_PURCHASE_DATA_LIST\" return " + purchaseDataList.toString());
        Log.i(tag, "getPurchases() - \"INAPP_DATA_SIGNATURE\" return " + (signatureList != null ? signatureList.toString() : "null"));
        Log.i(tag, "getPurchases() - \"INAPP_CONTINUATION_TOKEN\" return " + (continuationToken != null ? continuationToken : "null"));


    }else   {       
        Intent intent = null;               
        intent = new Intent(getActivity(), InAppBillingActivity.class); 
        startActivity(intent);  
    }
    c.close();
    db.close();
    }
}

我建议您使用新的计费系统,在IABHeloper类中,您可以执行上面描述的异步/同步操作,而不需要额外的代码


我遵循了这个指南:[更新了,而且比你的指南更简单。它工作得很好,但如果用户已经做了检查,我仍然必须在查询中进行检查,统计记录​​购买我必须打开另一个活动。我如何才能?你可以异步获取用户拥有的所有购买,例如当应用程序启动时,然后你可以将它们存储在SharedReferences中。我就是这样做的,它工作得很好。在Query Purchased items->yes下,但在这种情况下,如果你卸载然后再次安装?因为你在应用程序启动时查询资源清册每次启动应用程序时(包括用户重新安装时),都会更新SharedReferences。
private void Controlla_record_per_acquisto(){
     SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
    String controllo = "SELECT COUNT(_id) FROM FTB";
    Cursor c = db.rawQuery(controllo, null);

    while (c.moveToNext()){
        int numero_id = c.getInt(0);            

    if(numero_id >=1){  
        Intent intent = null;               
        intent = new Intent(getActivity(), InAppBillingActivity.class); 
        startActivity(intent);  


    }else   {       
        Intent intent = null;
        intent = new Intent(getActivity(), Cure.class); 
        startActivity(intent);
    }
    c.close();
    db.close();
    }
}