• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

MP3 Cutter Ringtone Maker

You such a topic reminds me that I have ever used an easy yet professional ringtone maker called Joyoshare Media Cutter to make ringtones for my iPhone. I used it for free, since it allows everyone to try 5 times without registration. To my great satisfaction, it can help me to cut and split various audios and videos without millisecond precision and with 100% original quality preserved. Recently, I got the lifetime license of it free of charge due to its official one-month back-to-school promotion. I am very glad. Just share this good news.

Help "Facebook" Error: "Can't connect" "Tap to retry".

Before you go resetting and deleting ...
These incompetent morons at Facebook if you unfollow a person or two will give yiu the error message
"Can't connect tap to retry "

Just re-follow someone you unfollowed and bang this idiotic nessage is gone and you'll have your normal news feed again...
If the morons at Facebook don't steal ideas and tech from others they can't do sh@#%t on their own...

MSL to unlock "unlocked" phone

Any suggestions on how to get my MSL to unlock my S9 would be much appreciated.

I'm ending service with sprint, but lost the sim card I had with them. They have unlocked my phone, but unfortunately the phone doesn't seem to know that (the sim card wasn't in when it was unlocked by Sprint). When I turn it on it tells me to contact Sprint to unlock the phone. When I contact Sprint with the IMEI number, they say the phone is already unlocked.

Will inputting an MSL unlock the phone so that I can use my new sim card? And if so, how do I get that code?

t

Notification log that actually works for Honor 8A

I want a notification log for my Huawei Honor 8A. I've tried several. None work completely. Does anyone know one that does?
I've tried:
--- NotificationLog - logged a few things, then stopped working.
--- Notification History Log - logs a lot, but constantly beeps to tell me it can't log any more
--- Notification History - also logs a lot, but misses key bank notifications that the previous one gets.

Anyone know a log that works for the 8A (or even 8 / 8X)

Many thanks

android studio and kotlin , how to get kotlin serialization working

I am working on creating a app using android studio ( version 4.0.1) using kotline(version 1.4.10) , I am not able to get kotlin serialization working , here is my build.gradle file entry

apply plugin: 'kotlinx-serialization'

here is error message which I get

Plugin with id 'kotlinx-serialization' not found.

I am new to android studio and kotline

what I need to do so that I can get kotlin serialization working

-Thanks

Async Function Needs Context

[Edit: I think I am asking, how do you access the calling Context in an Async callback function that has just got the Sku details?]

I have an async callback function within another function (onSkuDetailsResponse)

Code:
public void querySkuDetailsAsync(@BillingClient.SkuType final String itemType, final List<String> skuList){
    // Query the purchase async
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(itemType);
    mBillingClient.querySkuDetailsAsync(params.build(),
                                                                       new SkuDetailsResponseListener() {
               @Override
               public void onSkuDetailsResponse(BillingResult response,  List<SkuDetails> skuDetailsList) {

Note 'public void onSkuDetailsResponse' is the async function in question.

Within it I cycle through the Skus:

Code:
for (SkuDetails skuDetails : skuDetailsList) {
    String Sku, Title, Description, Price;
    Sku = skuDetails.getSku();
    Title = skuDetails.getTitle();
    Description = skuDetails.getDescription();
    Price = skuDetails.getPrice();
    MyIAPProduct.setSkuDetails(productsDetailsARR, getApplicationContext(), Sku, Title, Description, Price);
}

NOTE: The function `MyIAPProduct.setSkuDetails` saves the Sku's detail to preferences.

If I put 'this' where getApplicationContext() is, it turns red as 'this' at that point in time is the SkuDetailsReponseListener and not the Context within which this function is written.

So I put 'getApplicationContext()' as shown in the code, because I thought that would be the right thing to do.

However, when 'MyIAPProduct.setSkuDetails' runs (see code)

Code:
public static void setSkuDetails(ArrayList<MyIAPProduct> arr, Context cnt,
                                 String Sku, String Title, String Description, String Price)
{
    for(MyIAPProduct prod: arr){
        if(Sku.equals(prod.m_Sku)) {
            prod.setSkuDetails(cnt, Title, Description, Price);
        }
    }
}

and 'setSkuDetails' for the individual object is run:

Code:
public void setSkuDetails(Context cnt, String Title, String Description, String Price)
{
    m_Title = Title;
    m_Description = Description;
    m_Price = Price;
    saveToPreferences(cnt);
}

Then when it runs the function 'saveToPreferences' for the individual object:

Code:
public void saveToPreferences(Context cnt){
    SharedPreferences sharedPref = ((Activity) cnt).getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putBoolean(m_Sku + "Purchased", m_Purchased);
    editor.putString(m_Sku + "Title", m_Title);
    editor.putString(m_Sku + "Description", m_Description);
    editor.putString(m_Sku + "Price", m_Price);
    editor.commit();
}

the program crashed on the line

Code:
    SharedPreferences sharedPref = ((Activity) cnt).getPreferences(Context.MODE_PRIVATE);

where the Context is first used.

Can anyone explain why?

Can anyone explain what I need to do to get it working as I hope?

Will A Consumed IAP Still Appear in Purchases?

I am in Android Studio. When I get my purchases it still shows a purchase I thought I had consumed.

Here is my handlePurchases:

Code:
void handlePurchases(List<Purchase>  purchases) {
       String str;
       int numberOfPurchases = 0;

       for(Purchase purchase:purchases) {
           switch(purchase.getPurchaseState()) {
               case Purchase.PurchaseState.PURCHASED:
                   if (!verifyValidSignature(purchase.getOriginalJson(), purchase.getSignature())) {
                       // Invalid purchase
                       // show error to user
                       Toast.makeText(getApplicationContext(), "Error : Invalid Purchase", Toast.LENGTH_SHORT).show();
                       return;
                   }
                   // else purchase is valid
                   //if item is purchased and not acknowledged
                   if (!purchase.isAcknowledged()) {
                       AcknowledgePurchaseParams acknowledgePurchaseParams =
                               AcknowledgePurchaseParams.newBuilder()
                                       .setPurchaseToken(purchase.getPurchaseToken())
                                       .build();
                       mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
                   }
                   //else item is purchased and also acknowledged
                   else {
                       numberOfPurchases++;

                       // HOW DOES IT KNOW IF IT IS CONSUMED???

                       // DONT DELETE - if you want to keep on consuming
                       // ConsumeParams consumeParams = ConsumeParams.newBuilder()
                       //        .setPurchaseToken(purchase.getPurchaseToken())
                       //        .build();
                       //
                       //ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
                       //    @Override
                       //    public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
                       //
                       //        Toast.makeText(DiamondsActivity.this, "Purchase successful", Toast.LENGTH_SHORT).show();
                       //
                       //        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                       //
                       //            if (purchase.getSku().equalsIgnoreCase(ITEM_SKU_diamond_500)) {
                       //                Toast.makeText(DiamondsActivity.this, "Thank you for purchasing!", Toast.LENGTH_SHORT).show();
                       //            }
                       //        }
                       //    }
                       //};
                       //billingClient.consumeAsync(consumeParams, consumeResponseListener);
                   }
                   break;
               case Purchase.PurchaseState.PENDING:
                   Toast.makeText(getApplicationContext(), "Purchase is Pending. Please complete Transaction", Toast.LENGTH_SHORT).show();
                   break;
               case Purchase.PurchaseState.UNSPECIFIED_STATE:
                   Toast.makeText(getApplicationContext(), "Purchase Status Unknown", Toast.LENGTH_SHORT).show();
                   break;
           }
       }
   }

The critical bit is where it say // HOW DOES IT KNOW IF IT IS CONSUMED???.

How do I tell if a purchase has been consumed?

Should the consumed purchase still be in the purchases array?

Is there something I should be doing in my Google Play Programmer Account for the IAP, ie a flag of some sort to say it is consumable?

Filter

Back
Top Bottom