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

Congrats to Joe Biden & Kamala Harris our 46th President and Vice President

Congrats to you guys.

congrats Uncle Joe, you ran a well oiled campaign.....running on empathy and unity......it was such a refreshing thing to vs the divisiveness the other guy used to control his presidency and divide the country.

and congrats to Kamala for being the first woman VP, first black woman VP, and first Asian American woman VP. you put i nice crack in that glass ceiling for women across the country.

i feel better now that you will be in control of our country. i can now sleep better at night knowing the US is in good hands.

and putin beware!!!!!!!! Biden is out for you!!!!!!!

PeriodicWorkRequest (work v1.0.1) is spawning 20 times every 15m in stead of just once, not sure why

In the follow code excerpts, I am utilizing a BroadcastReceiver to start up a Service on device boot and/or package reload. This NotificationService is calling my Worker via PeriodicWorkRequest every fifteen minutes. Everything initially works as it is supposed to, until the NotificationWorker is executed. It seems that, at the point where the Worker is invoked, it runs twenty times instead of just once. I believe that is twenty times exactly, as well. After all of it is said and done, it waits for ~15 minutes, as it should, and then exhibits the same behavior when it again invokes the Worker. Ideally this Worker should only be run once every 15m, especially being as some of the computation that it will be doing is rather expensive.

I have spent days now, googling for more information (I've partially been hampered in this due to using Work v1.0.1, instead of the more recent, androidx v2.4.0, but I'm not ready to upgrade everything that would be broken in my project with that change) and doing my best to debug this issue. Unfortunately, the debugging has been rather slow and unproductive, due to the fact that I can rarely get my Log.?() messages to even show up, let alone to give me any hints as to where this behavior is coming from. This behavior (Log messages not showing up) has been a problem in BootServiceStart, NotificationWorker, and NotificationService, and I've got no idea why.

Here is the applicable code for the issue; please note that if you follow the dpaste links you will find the general areas of the problematic code highlighted in order to ease diagnosis a bit (dpasted code will only be available for 6 more days):

BootServiceStart - also here on dpaste
Code:
    package com.example.sprite.half_lifetimer;
  
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.util.Log;
  
    public class BootServiceStart extends BroadcastReceiver {
        public void onReceive(Context context, Intent arg1) {
            Intent intent = new Intent(context , NotificationService.class);
  
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                context.startForegroundService(intent);
            } else {
                context.startService(intent);
            }
  
            if (GlobalMisc.Debugging) {
                Log.i("Halflife.BootServiceStart", "Attempted to start NotificationService");
            }
        }
    }

NotificationService - also here on dpaste
Code:
    package com.example.sprite.half_lifetimer;
  
    import android.app.Notification;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;;
    import android.app.Service;
    import android.content.Intent;
    import android.os.Build;
    import android.os.IBinder;
    import android.support.annotation.Nullable;
    import android.support.v4.app.NotificationCompat;
    import android.util.Log;
    import androidx.work.PeriodicWorkRequest;
    import androidx.work.WorkManager;
  
    import java.time.LocalDateTime;
    import java.util.HashMap;
    import java.util.concurrent.TimeUnit;
  
    public class NotificationService extends Service {
        public static HashMap<Integer, Boolean> firedNotifications = new HashMap<>();
        public static LocalDateTime lastNotificationLoopLDT = null;
  
        @Nullable
        public IBinder onBind(Intent intent) {
            return null;
        }
  
        /**
         * Method handles creation of a NotificationChannel and database
         * initialization (for this particular subset of the code), then passing
         * control off to notificationLoop().
         */
        public void onCreate() {
            startForeground(31337, buildForegroundNotification());
  
            if (GlobalMisc.Debugging) {
                Log.i("Halflife.NotificationService.onCreate", "Started NotificationService");
            }
  
            // Create the NotificationChannel, but only on API 26+ because
            // the NotificationChannel class is new and not in the support library
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel chan = new NotificationChannel(
                        "taper-n-clearing-talk", "taper-n-clearing",
                        NotificationManager.IMPORTANCE_NONE);
                chan.setDescription("Notifications for Taper dosages and Substance clearance");
  
                // Register the channel with the system; you can't change the importance
                // or other notification behaviors after this
                NotificationManager notificationManager = getSystemService(NotificationManager.class);
                notificationManager.createNotificationChannel(chan);
            }
  
            //get the database ready
            try {
                Permanence.Misc.init(/*NotificationService.this*/ getApplicationContext());
            } catch (Exception ex) {
                Log.e("Halflife.notificationLoop", "Unable to init database: " +
                        ex.toString());
            }
  
            if (GlobalMisc.Debugging) {
                Log.i("Halflife.onCreate", "all valid tapers: " +
                        Permanence.Tapers.loadAllValidTapers(getApplicationContext()).toString());
  
            }
  
            //notificationLoop();
            PeriodicWorkRequest notificationsRequest =
                    new PeriodicWorkRequest.Builder(NotificationWorker.class, 15, TimeUnit.MINUTES)
                            .build();
            WorkManager.getInstance()
                    .enqueue(notificationsRequest);
        }
  
        private Notification buildForegroundNotification() {
            NotificationCompat.Builder b=new NotificationCompat.Builder(this);
  
            b.setOngoing(true)
                    .setContentTitle("HLT Foreground Service")
                    .setContentText("Giving Half-life Timer foreground priority")
                    .setChannelId("taper-n-clearing-talk")
                    .setSmallIcon(getApplicationContext().getResources().getIdentifier(
                            "plus_medical_blue","drawable",
                            getApplicationContext().getPackageName()));
  
            return(b.build());
        }
    }

NotificationWorker - also here on dpaste
Code:
    package com.example.sprite.half_lifetimer;
  
    import android.app.PendingIntent;
    import android.app.TaskStackBuilder;
    import android.content.Context;
    import android.content.Intent;
    import android.support.annotation.NonNull;
    import android.support.v4.app.NotificationCompat;
    import android.support.v4.app.NotificationManagerCompat;
    import android.util.Log;
  
    import androidx.work.Worker;
    import androidx.work.WorkerParameters;
  
    import java.time.Duration;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
  
    public class NotificationWorker extends Worker {
        private boolean notificationDebugging = false;
  
        public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
            super(context, params);
        }
  
        @Override
        public Result doWork() {
            LocalDateTime nextScheduledDosage;
            long adminDurationMinutes;
  
            if (!notificationDebugging) {
                if (GlobalMisc.NotificationsEnabled) {
                    //taper notification loop
                    for (Taper taper : Permanence.Tapers.loadAllValidTapers(getApplicationContext())) {
                        //this will handle if any tapers have been added since inception
                        if (!NotificationService.firedNotifications.containsKey(taper.getId())) {
                            NotificationService.firedNotifications.put(taper.getId(), false);
                        }
  
                        //if this is a constrained taper, but we're outside of the window, just
                        //go on to the next taper
                        if (taper.isConstrained() && !taper.inConstraintHours()) {
                            Log.i("Halflife.notificationLoop",
                                    "skipping " + taper.toString() +
                                            " (outside of hourly constraints)");
  
                            continue;
                        }
  
                        if (!NotificationService.firedNotifications.get(taper.getId())) {
                            try {
                                nextScheduledDosage = taper.findNextScheduledDosageLDT();
                                if (!taper.isConstrained()) {
                                    Log.i("Halflife.notificationLoop",
                                            "working with unconstrained taper");
  
                                    adminDurationMinutes = Duration.ofDays(1).dividedBy(
                                            taper.getAdminsPerDay()).toMinutes();
                                } else {
                                    Log.i("Halflife.notificationLoop",
                                            "working with constrained taper");
  
                                    //not sure if this is necessary or not, but might as well
                                    //throw it in since the goddamned code is too complex for me
                                    //to follow right now down below
                                    LocalTime nextDosageTime =
                                            nextScheduledDosage.toLocalTime();
                                    if (nextDosageTime.isBefore(taper.getStartHour()) ||
                                            nextDosageTime.isAfter(taper.getEndHour())) {
                                        Log.i("notificationLoop",
                                                "skipping " + taper.toString() +
                                                        " (outside of constraint hours)");
  
                                        continue;
                                    }
  
                                    //this part, of course, is necessary
                                    adminDurationMinutes =
                                            Duration.between(taper.getStartHour(),
                                                    taper.getEndHour()).dividedBy(
                                                    taper.getAdminsPerDay())
                                                    .toMinutes();
                                }
  
                                if (GlobalMisc.Debugging) {
                                    Log.i("Halflife.notificationLoop", "Checking taper: " +
                                            taper.getName());
                                    Log.i("Halflife.notificationLoop", "nextScheduledDosage " +
                                            "contains: " + nextScheduledDosage.toString());
                                }
  
                                if (((NotificationService.lastNotificationLoopLDT != null) &&
                                        nextScheduledDosage.isAfter(
                                                NotificationService.lastNotificationLoopLDT) &&
                                        nextScheduledDosage.isBefore(
                                                LocalDateTime.now().plusMinutes(
                                                        (adminDurationMinutes / 5)))) ||
                                        (nextScheduledDosage.isAfter(
                                                LocalDateTime.now().minusMinutes(1)) &&
                                                nextScheduledDosage.isBefore(
                                                        LocalDateTime.now().plusMinutes(
                                                                (adminDurationMinutes / 5))))) {
                                    fireTaperNotification(taper);
  
                                    //set firedNotifications to reflect that we sent this
                                    //notification
                                    NotificationService.firedNotifications.replace(taper.getId(), true);
                                } else if (GlobalMisc.Debugging) {
                                    Log.i("Halflife.notificationLoop",
                                            "not displaying notification as per " +
                                                    "datetime constraints");
                                }
                            } catch (Exception ex) {
                                Log.e("Halflife.notificationLoop",
                                        "Issue finding next scheduled dosage: " +
                                                ex.toString());
  
                                return Result.failure();
                            }
                        }
                    }
                } else {
                    GlobalMisc.debugMsg("NotificationWorker:doWork",
                            "Would have just gone into substance taper notification loop");
                }
  
                if (GlobalMisc.NotificationsEnabled) {
                    //substance clearing notification loop
                    //LocalDateTime fiveMinAgo = LocalDateTime.now().minusMinutes(5);
                    for (Substance sub : Permanence.Subs.loadUnarchivedSubstances(
                            getApplicationContext())) {
                        if (GlobalMisc.Debugging) {
                            Log.i("Halflife.notificationLoop",
                                    "Checking sub clearance: " + sub.getCommon_name());
                        }
  
                        //has this substance cleared within the last 5 minutes?
                        LocalDateTime clearedAt = sub.getFullEliminationLDT();
                        if (clearedAt != null) {
                            if (NotificationService.lastNotificationLoopLDT != null) {
                                if (clearedAt.isAfter(NotificationService.lastNotificationLoopLDT) &&
                                        clearedAt.isBefore(LocalDateTime.now())) {
                                    //fire the notification
                                    try {
                                        fireSubClearedNotification(sub);
                                    } catch (Exception ex) {
                                        Log.i("Halflife.doWork", ex.toString());
  
                                        return Result.failure();
                                    }
                                }
                            }
                        }
                    }
                } else {
                    GlobalMisc.debugMsg("NotificationWorker:doWork",
                            "Would have just gone into substance clearing notification loop");
                }
            } else {
                Log.i("Halflife.notificationLoop", "In notification debugging " +
                        "mode");
  
                try {
                    fireTaperNotification(null);
                } catch (Exception ex) {
                    Log.i("Halflife.doWork", ex.toString());
  
                    return Result.failure();
                }
            }
  
            NotificationService.lastNotificationLoopLDT = LocalDateTime.now();
  
            return Result.success();
        }
  
        /**
         * Method handles the actual building of the notification regarding
         * the applicable taper, and shows it unless our handy HashMap
         * 'firedNotifications' shows that there is already a notification
         * present for this particular taper.
         *
         * @param taper the taper to display notification for
         */
        private void fireTaperNotification(Taper taper) throws Exception {
            Context ctxt = getApplicationContext();
            float currentDosageScheduled = taper.findCurrentScheduledDosageAmount();
  
            //here's the legitimate meat 'n potatoes for firing a notification
            try {
                //if we've already blown the dosage required for the next administration, just skip this
                //one
                if (currentDosageScheduled <= 0) {
                    Log.d("fireTaperNotification", "More dosage taken than needs to be " +
                            "for the current taper step; skipping this taper administration.");
  
                    return;
                }
  
                Intent intent = new Intent(ctxt, AdminData.class);
                intent.putExtra("SUB_NDX",
                        GlobalMisc.getSubListPositionBySid(taper.getSid()));
                intent.putExtra("NOTIFICATION_BASED", true);
                TaskStackBuilder stackBuilder = TaskStackBuilder.create(ctxt);
                stackBuilder.addParentStack(SubData.class);
                stackBuilder.addNextIntentWithParentStack(intent);
  
                Intent delIntent = new Intent(ctxt, NotificationDismissalReceiver.class);
                delIntent.putExtra("TAPER", true);
                delIntent.putExtra("SUB_ID", taper.getSid());
  
  
                PendingIntent pendingIntent =
                        stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
                PendingIntent pendingDelIntent = PendingIntent.getBroadcast(ctxt, 0,
                        delIntent, PendingIntent.FLAG_UPDATE_CURRENT);
  
                LocalDateTime latestUsageLDT;
                LocalDateTime todaysOpeningConstraintLDT;
                boolean beforeOpeningConstraint = false;
                latestUsageLDT = Converters.toLocalDateTime(
                        Permanence.Admins.getLatestUsageTimestampBySid(taper.getSid()));
                if (taper.isConstrained()) {
                    todaysOpeningConstraintLDT =
                            LocalDateTime.now().withHour(taper.getStartHour().getHour())
                                    .withMinute(taper.getStartHour().getMinute())
                                    .withSecond(0);
  
                    if (latestUsageLDT.plus(taper.getTotalConstraintDuration()).isBefore(
                            todaysOpeningConstraintLDT)) {
                        beforeOpeningConstraint = true;
                    }
                }
  
                NotificationCompat.Builder builder = new NotificationCompat.Builder(
                        ctxt, "halflife")
                        .setContentTitle("Half-life Timer Taper " + taper.getName())
                        //note that the above line, right after "Due since: " +, will
                        //end up displaying the epoch start date for a taper on a
                        //substance that has no administrations whatsoever
                        .setSmallIcon(ctxt.getResources().getIdentifier("plus_medical_blue",
                                "drawable", ctxt.getPackageName()))
                        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                        .setContentIntent(pendingIntent)
                        .setDeleteIntent(pendingDelIntent)
                        .setAutoCancel(true);
  
                long rawTimestamp = Permanence.Admins.getLatestUsageTimestampBySid(taper.getSid());
  
                GlobalMisc.debugMsg("fireTaperNotification",
                        "Permanence.Admins.getLatestUsageTimestampBySid returns: " +
                                rawTimestamp);
  
                if (Converters.toLocalDateTime(rawTimestamp).isBefore(
                        LocalDateTime.of(1980, 1, 1, 0, 0, 0))) {
                    builder.setContentText("Due: " +
                            String.format("%.2f", currentDosageScheduled) +
                            Permanence.Subs.getUnitsBySID(taper.getSid()) + "/" +
                            Permanence.Subs.loadSubstanceById(
                                    taper.getSid()).getCommon_name() + "\n" +
                            "Due now");
                } else if (beforeOpeningConstraint) {
                    builder.setContentText("Due:" +
                            currentDosageScheduled +
                            Permanence.Subs.getUnitsBySID(taper.getSid()) + " of " +
                            Permanence.Subs.loadSubstanceById(
                                    taper.getSid()).getCommon_name() + "\n" +
                            "Due since: " +
                            LocalDateTime.now().withHour(taper.getStartHour().getHour())
                               .withMinute(taper.getStartHour().getMinute())
                               .withSecond(0));
                } else {
                    builder.setContentText("Due:" +
                            currentDosageScheduled +
                            Permanence.Subs.getUnitsBySID(taper.getSid()) + " of " +
                            Permanence.Subs.loadSubstanceById(
                                    taper.getSid()).getCommon_name() + "\n" +
                            "Due since: " +
                            Converters.toLocalDateTime(
                                    Permanence.Admins.getLatestUsageTimestampBySid(
                                            taper.getSid())).plus(
                                    Duration.ofDays(1).dividedBy(
                                            taper.getAdminsPerDay())));
                }
  
                NotificationManagerCompat notificationManager =
                        NotificationManagerCompat.from(ctxt);
  
                notificationManager.notify(1, builder.build());
  
                if (GlobalMisc.Debugging || notificationDebugging) {
                    Log.i("Halflife.fireNotification",
                            "attempted to send taper notification");
                }
            } catch (Exception ex) {
                Log.e("Halflife.fireNotification",
                        "Something broke in taper notification: " + ex.toString());
  
                throw new Exception("taper notification broke");
            }
        }
  
        private void fireSubClearedNotification(Substance sub) throws Exception {
            Context ctxt = getApplicationContext();
  
            try {
                Intent intent = new Intent(ctxt,
                        SubsRankedByLastUsage.class);
  
                PendingIntent pendingIntent = PendingIntent.getActivity(
                        ctxt, 1, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);
  
                NotificationCompat.Builder builder = new NotificationCompat.Builder(
                        ctxt, "halflife")
                        .setContentTitle("Half-life Timer Cleared: " + sub.getCommon_name())
                        .setContentText(sub.getCommon_name() + " cleared at " +
                                sub.getFullEliminationLDT().toString())
                        .setSmallIcon(ctxt.getResources().getIdentifier("plus_medical_blue",
                                "drawable", ctxt.getPackageName()))
                        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true);
  
                NotificationManagerCompat notificationManager =
                        NotificationManagerCompat.from(ctxt);
  
                notificationManager.notify(1, builder.build());
  
                if (GlobalMisc.Debugging || notificationDebugging) {
                    Log.i("Halflife.fireNotification",
                            "attempted to send sub clearednotification");
                }
            } catch (Exception ex) {
                Log.e("Halflife.fireNotification",
                        "Something broke in sub cleared notification: " + ex.toString());
  
                throw new Exception("sub cleared notification broke");
            }
        }
    }

I would be very grateful to anybody who might be able to offer any insight on why this behavior is happening, tips on how to avoid this behavior, where to find API & other documentation on the older, deprecated JetPack work v1.0.1 library, or what I can do in Android Studio to better diagnose this issue, as attempts for debugging with what I know how to do have proven futile.

Thank you very much for your time and help on this matter!

Best Love Stories App | Astonly Hooked on the Story

ASTONLY offers you a small bite-sized chat stories to fit any mood. It will get you hooked on a feeling easily - Experience the story in a different way! With addictive chat stories of all kinds, you just lay back and enjoy in the chat fiction!

It is easy to get hooked on a story - Scary text messages, yarn, mystery, horror, love chat stories... Read real chat stories with amazing plots, unexpected twists and story telling techniques. It`s a text story time!

What is actually chat fiction? Well, it is a digital conversation through text messages between two (or more) characters. It is a unique way of story telling. Get hooked on a feeling - Enjoy in addictive chat stories!

Feeling bored? Need some excitement? Read our text message stories and it will bring you the joy of excitement and awaken various feelings, because we have stories to fit any mood, and for all tastes! A realistic chat interface will get you engaged with our stories.

What kind of real chat stories you can find in our app?

- Scary text messages - You love that feeling of being scared while reading chat story? Check out our scary stories and we are sure that you will get hooked on a feeling you love!

- Love chat stories - For all romantic souls and love story readers - Enjoy in a feeling of virtual romance.

- Yarn, mystery and horror stories - We have prepared stories for any mood and taste!

- Add your own story - This feature is coming soon!

- Above all - Real and addictive chat stories!

This is not just one more app about reading. Each text story has an interesting and unexpected plot, which will make you want to read more and more!

Some horror on the bus trip? Or during camping? Love romance as a bedtime story? ASTONLY have it all covered! Reading cannot get boring, definitely not with us!

This app is easy to navigate. You just have to tap to unfold the mystery and the continuation of the story.

Scary or love story? What will you choose?

Download ASTONLY and get your daily dose of entertaining and real chat stories. Get hooked on a feeling, enjoy in chat fiction - It`s a text story time! Dive into a world of mystery, thriller, romance, and horror. Start reading ASTONISHING chat stories for free!
---
More about us:

E-mail: support@astonly.app

Website: www.astonly.app

Facebook:www.facebook.com/AstonlyStory

Instagram: www.instagram.com/astonly.app
View attachment 154851
02-1.png
View attachment 154851
02-1.png
View attachment 154851
02-1.png
View attachment 154854 View attachment 154855 View attachment 154856 View attachment 154851
02-1.png
View attachment 154854 View attachment 154855 View attachment 154856 View attachment 154851
02-1.png
View attachment 154854 View attachment 154855 View attachment 154856 View attachment 154851 View attachment 154851 02-1.png View attachment 154854 View attachment 154855 View attachment 154856 View attachment 154856

Wont shut off

Quick overview of the situation. Bought a G6 on EBay and it has the IMDI removed due to being a display model , so as the ad said, WIFI only. That was all I needed.

Bought it to fly my DJI drone so WIFI was all I need. Get the phone, It's 100% dead. Thought that was wierd. Put a charge on it and the phone started up just fine but didn't ask "English or Spanish?" Figured that was OK since the app loaded just fine and controls worked perfectly.

Went to turn the G6 off and it asks for the password to be shut down. Tried to do a factory reset, and of course, password needed. I can't seem todo anything without the password except for opening apps.

I've downloaded 2 programs thinking they would help the situation. "Reiboot for Android" and "4uKey for Android" and neither has worked.

Any ideas to make this thing so I can shut it off?

Apps Android Kotlin Billing Library 3

Hello to everyone... I am new here :)

I am trying to create a simple InApp subscription purchase as one file (all within MainActivity.kt)

Just one SKU SUB for 1 month period. Thats it

What do you think about nesting almost all the code withing one button? :)
On click ->
-Starts the BillingClientConnection
-Checks if Subscriptions Feature supported
-Then makes querySkuDetailsAsync for details about only 1 subscription
... and on received result to start the purchase flow?


I am now kinda stuck at receiving result from querySkuDetailsAsync


when (billingResult.responseCode) {

BillingClient.BillingResponseCode.OK -> {

if (skuDetailsList.orEmpty().isNotEmpty()) {

Toast.makeText(applicationContext, "Cool!", Toast.LENGTH_LONG).show()

}
else
{
Toast.makeText(applicationContext, "Not cool!", Toast.LENGTH_LONG).show()

//////////// I AM HERE NOW///////////////
// Toast shows "Not cool!"
////////////////////////////////////////////////////

}
}
}


Whole code: https://pastebin.com/eGLKjAzH



What I did until now:

-I have created developer account and merchant account.

-I have compiled the code by using "Generate Signed Bundle/Apk" where I created the new Key

-I have created the new listing for a test app in Internal test, uploaded file, and status is:

"Available to internal testers "

-I have added my test email in list with testers

-I have added my email in the list with License testers and set option "Licensed"


-I got url for downloading test app... which at the moment shows

" We're sorry, the requested URL was not found on this server. "

but ok, i guess that it is as stated... that it can take up to 48h for first time published app to become available to testers...


Probably thats why I dont receive anything in the query... Even though I am using the signed app with the same uploaded key... but... Offline version of app. I couldnt test how it works when downloaded :)



So.. While I am waiting for app to become available for download I would like to research more about the whole InApp Testing and in general InApp purchase...

So.. If it is not a broblem, to ask few more questions:

Can I use my custom key when compile app for purpose of internal test? Or I have to use public key?

Can I use my custom key when compile final app for purpose of publishing in production? Or I have to use public key?

Fatal Exception: java.lang.IllegalArgumentException width and height must be > 0 on Chromecast imple

I am trying to implement Chromecast functionality using casty sdk.

Ref: https://github.com/DroidsOnRoids/Casty

But always getting

Fatal Exception: java.lang.IllegalArgumentException width and height must be > 0

android.view.View.draw (View.java:21594)

Below is my code

//Oncreate()
casty = Casty.create(this)
.withMiniController();

casty.setOnConnectChangeListener(new Casty.OnConnectChangeListener() {
@override
public void onConnected() {
Util.showToast(getApplicationContext(), "Connected");
casty.getPlayer().loadMediaAndPlay(createSampleMediaData()...);
}

@override
public void onDisconnected() {
Util.showToast(getApplicationContext(), "Disconnected");
}
});

//Menu
@override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
casty.addMediaRouteMenuItem(menu);
getMenuInflater().inflate(R.menu.browse, menu);
return true;
}

So how can we solve it any idea? Did anyone face it?

android 11 custom update

Hi Sir,
I try to develop android system, I have some problems about development.
I get used to ubuntu18 and tag of android 11 is android-11.0.0_r17,
I have built successfully with lunch 30 "aosp_x86-eng" and I have seen $OUT files and checked
then I prepared test_aosp.sh file under ~/bin
the results are like that and no emulator window appears:
$ ./test_aosp.sh
emulator: Android emulator version 30.0.21.0 (build_id 6647651) (CL:N/A)
emulator: Found AVD name 'a25x86'
emulator: Found AVD target architecture: x86
emulator: argv[0]: 'emulator'; program directory: '/home/ubuntu/aosp/prebuilts/android-emulator/linux-x86_64'
PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT

the content of test_aosp.sh is :
#!/bin/sh
emulator -avd a25x86 -verbose -show-kernel -system $OUT/system.img -ramdisk $OUT/ramdisk.img -initdata $OUT/userdata.img

when I checked ROGER YE notes, before that partition he had run ~/Android/Sdk/emulato/emulator @a25x86, also I did it with the last version of android-studio.

Also I try to do following thing but is has loop in the command line and the black window of emulator shows up but not appear any menu and any more:
$ sudo ~/Android/Sdk/emulator/emulator -avd a25x86 -verbose -show-kernel -system $OUT/system.img -ramdisk $OUT/ramdisk.img -initdata $OUT/userdata.img

also I have checked the emulator location with the following command:
$ which emulator
/home/ubuntu/aosp/prebuilts/android-emulator/linux-x86_64/emulator

also I want to add following results, maybe you want to check it:
$ printenv |grep ANDROID
ANDROID_DEV_SCRIPTS=/home/ubuntu/aosp/development/scripts:/home/ubuntu/aosp/prebuilts/devtools/tools:/home/ubuntu/aosp/external/selinux/prebuilts/bin:/home/ubuntu/aosp/prebuilts/misc/linux-x86/dtc:/home/ubuntu/aosp/prebuilts/misc/linux-x86/libufdt
ANDROID_TOOLCHAIN_2ND_ARCH=
ANDROID_PRE_BUILD_PATHS=/home/ubuntu/aosp/prebuilts/jdk/jdk11/linux-x86/bin:
ANDROID_HOST_OUT_TESTCASES=/home/ubuntu/aosp/out/host/linux-x86/testcases
ANDROID_JAVA_TOOLCHAIN=/home/ubuntu/aosp/prebuilts/jdk/jdk11/linux-x86/bin
ANDROID_TARGET_OUT_TESTCASES=/home/ubuntu/aosp/out/target/product/generic_x86/testcases
ANDROID_BUILD_TOP=/home/ubuntu/aosp
ANDROID_BUILD_PATHS=/home/ubuntu/aosp/out/soong/host/linux-x86/bin:/home/ubuntu/aosp/out/host/linux-x86/bin:/home/ubuntu/aosp/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin:/home/ubuntu/aosp/development/scripts:/home/ubuntu/aosp/prebuilts/devtools/tools:/home/ubuntu/aosp/external/selinux/prebuilts/bin:/home/ubuntu/aosp/prebuilts/misc/linux-x86/dtc:/home/ubuntu/aosp/prebuilts/misc/linux-x86/libufdt:/home/ubuntu/aosp/prebuilts/clang/host/linux-x86/llvm-binutils-stable:/home/ubuntu/aosp/prebuilts/android-emulator/linux-x86_64:/home/ubuntu/aosp/prebuilts/asuite/acloud/linux-x86:/home/ubuntu/aosp/prebuilts/asuite/aidegen/linux-x86:/home/ubuntu/aosp/prebuilts/asuite/atest/linux-x86:
ANDROID_EMULATOR_PREBUILTS=/home/ubuntu/aosp/prebuilts/android-emulator/linux-x86_64
ANDROID_PRODUCT_OUT=/home/ubuntu/aosp/out/target/product/generic_x86
ANDROID_PYTHONPATH=/home/ubuntu/aosp/development/python-packages:
ANDROID_TOOLCHAIN=/home/ubuntu/aosp/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin
ANDROID_JAVA_HOME=/home/ubuntu/aosp/prebuilts/jdk/jdk11/linux-x86
ANDROID_HOST_OUT=/home/ubuntu/aosp/out/host/linux-x86

Could you guide me?
Thank you
Regards

Otter notter

After a long wait, automatic refund (?!), and reorder, I at last got an Otterbox for the A20S. I'm not sure it really fits, though. I had a tough time stretching the rubbery part around the phone, and have not been able to add the plastic part. It's hard to use some of the functions with the inner case on, and the screen is still not protected. Would I be better off getting some kind of waterproof package instead? How would I use the phone if it's in that? I recently saw an ad for a kind of purse to hold a phone while still leaving it useful, but that's not my style.

LG Wing

I see there isn't a forum room for the LG Wing.

Does anyone on here have this phone yet.

What are your thoughts about the phone if you have one after use..

Do you have a case for it? If so what is it?

I am looking at ordering tomorrow with its release on AT&T. I am pretty rough with everyday use so I want to make sure it's rugged enough. Currently use a lifeproof case on my Galaxy.

Happy 2nd Birthday global OnePlus 6T

Happy 2nd Birthday to the Global OnePlus 6T!

dDKIS2Th.jpg


Yes, today, the 6th November, marks 2 years since the worldwide release of the global OnePlus 6T back in 2018.

With its 6.41" screen, 6/8GB of memory, 128/256GB storage and a 20MP camera the global OnePlus 6T offered better spec's than most phones on the market at that time and can hold its own even today against a lot of devices out there.

The global OnePlus 6T now enters its 3rd year of support from OnePlus and as per their schedule, this will be approximately bi-monthly, (every 2 months), Android Security updates for the next year.

Also, OnePlus has stated that both the global OnePlus 6 & 6T will receive an update to Android 11 in future. No official time scale has been given for when the platform update will happen but if OnePlus follow the 5 series schedule we should see Open Beta test releases for the 6 series probably in Q2, (April-June), of 2021 with a stable OxygenOS release, barring hiccups, around mid to late Q2.

On a personal note I must say that for me, the OnePlus 6T running on a fast 2G/3G/LTE network in the U.K. with 99% coverage and fast fibre optic Wi-Fi broadband and without any extra country or carrier bloatware, has been and still is, a trusty and reliable phone and well worth the money.

Well done OnePlus and Happy 2nd Birthday to the global 6T.

Safe Mode made things worse

I was having some major issues with my phone just recently so I put the phone in Safe mode and went into almost every app to work with some settings the last time I was able to clear up some issues and when I came out of safe mode things appear to be fine. Now I am not going to lie and say that I don't install third party apps. As a matter of fact I'm kind of addicted to it but I do uninstall them on occasion. Anyway after I did the safe mode and rebooted my phone is completely jacked up. Almost every app I have installed including system apps are reconfigured or have went back to their manufacturing settings which is really weird because I didn't touch any of those.

Calls ring in earbuds when phone in DND

Hey all,

I think my problem applies to many folks so I hope it's ok to post here...Official google chat help was not helpful. Hoping there is a third-party solution for this problem. When my phone (Pixel 3) is in DND, calls still ring in the ear buds. If I disable phone calls in the bluetooth settings, it doesn't ring, but it pauses music/podcast playback. The official google chat rep said DND only applied to the phone, not attached devices, that I should make this a "feature request" through product-feedback.



I can't accept that. It's bonkers it behaves this way. Drifting off to sleep to an audiobook, when "BAM! RING! RING! INCOMING CALL FROM..." Or I'm in the zone during a workout "Push it to the limit, one more.......(silence)...........(silence continues)........(silence continues).......(silence continues)......(silence continues)......(silence continues)......(silence continues)......(silence continues)......(silence continues)......(silence continues)......(silence continues)......(silence continues)......(silence continues)......time."



Any solutions other than buy an iPhone?

Filter

Back
Top Bottom