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

  • Question
Nokia 5.4 bootloop

I have my mother her phone here. It's a Nokia 5.4 with Android one. It's stuck on the Nokia logo. When I press volume up and start button I get the little Adroid guy and a no command text. When I press volume down and start button I get the options power off, Start, restart bootloader, recovery mode. Non of those help anything.
The bootloader and baseband version are empty. Not sure how to go from here. I would think trying a hard reset and use some software to atleast get (some) of her pictures bak was the easiest thing to do however there is no factory reset option. I hope someone can help me. She is 88 and eventhough she doesnt really understand her phone, she likes to play a game and take pictures on it.

"We've detected that this app is using an unsupported version of Play billing. Please upgrade to Billing Library 5 or newer to release this app."

Hey everyone, just encountered an issue right on the cusp of releasing a game. When I try to upload my game to the playstore, it comes up with the error "We've detected that this app is using an unsupported version of Play billing. Please upgrade to Billing Library 5 or newer to release this app.". By default Unreal 5.0 has version 3, my game doesn't include any form of transactions and I'm unclear if I can circumvent this step if I find out how to turn off microtransactions in engine. I've looked through all I could find related to this error but unfortunately nothing has worked so far. If anyone has experience with how to fix this, I would greatly appreciate it. Thanks for reading

  • Question
Vortex T10M Pro Not Recognizing Installed SD Card

Cool tablet, but I really want to put a bunch of books on an SD card and use it to read them. However, I have tried several different SD cards, formatted according to the instructions, but this tablet does not recognize any of them. Further, the instructions and illustrations in the owner's manual for accessing SD card content are completely different from what I am seeing on my tablet. How do I access the SD card installed in my tablet? The manual references a "Settings" option, but none of the settings options I see on this tablet contain any information about the installed SD card. Thanks in advance.

What is the correct thread-safe way to access shared resource?

We are developing on Samsung Tab Active 4 Pro using Android Studio, kotlin and java. We are getting constant at random times app deadlocks. I am not new to developing with threads and synchronization methods however I am very new to Android development. I assume I am doing something wrong and will share what I am doing. But to set up the situation, we are using OSMDroid for the map viewing and are using layers of the map for draw icons that represent aircraft flying over the map. The main android app is done in kotlin and the UDP over ethernet is written in java files. Aircraft telemetry is received at about 1 hz over ethernet inside protobuf packets. The protobuf is received and parsed in a Listener java class using a thread and implemented in the run() method. In the udp handler where we receive and parse protobuf we call a kotlin object "class" (unfortunate use of terms with kotlin) that has a method UpdateEntity(). Here is a snippet of this code that handles a proto message type called Entity. EntityClass is the java wrapper created. This part is working fine, no issues here, just showing for context.

Code:
             if (msg.getMessageTypeEnum() == MessageWrapperClass.MessageWrapper.MessageTypeEnum.MESSAGE_TYPE_ENTITY) {
                    EntityClass.Entity entity = msg.getMessageEntity();
                    Log.d(TAG, "Listener:run (thread): Entity received\"" + entity.toString());

                    // 0 deg points north, vertically in map
                    double heading = Math.atan2(
                            entity.getKinematics().getEastSpeed(),
                            entity.getKinematics().getNorthSpeed()) * 180.0 / Math.PI;
                    // Put to [0,360] range
                    if (heading < 0) {
                        heading += 360.0;
                    }

                    Position position = new Position(
                            heading,
                            entity.getKinematics().getPosition().getLatitudeDeg(),
                            entity.getKinematics().getPosition().getLongitudeDeg(),
                            entity.getKinematics().getPosition().getAltitudeHaeMeters(),
                            0.0);

                    HostileEntity unit = new HostileEntity(
                            Utils.TrimUUID(entity.getEntityID().getValue().toString()),
                            //todo: we need callsign here
                            "red",  //entity.getEntityID().getValue().toString(),
                            position, false);

                    Datasource.INSTANCE.UpdateEntity(unit);   // <---------- This accesses the shared list

                }

Datasource.INSTANCE.UpdateEntity(unit); call accesses the share list. Here is that method in total. Note Datasource is that singleton-like object construct that has all public "static" methods. (I'm a C++ guy mostly :) New to kotlin)

Java:
/**
 * [Datasource] holds the data that is utilized by the UI
 */
object Datasource {

    var currentStatus = ""
    var currentMode = Modes.Nav
    var Settings:SettingsClass = SettingsClass()

    //This is the list of automations
    var AutomationList = mutableListOf<AutomationClass>(
        WTP(),
        EW()
    )

    var TabPages = mutableListOf<String>()
    var TabPageContents = mutableListOf<TabPage>()
    var KillPairs = mutableListOf<KillPair>()
    var SelectedTab:Int = 0
    var newTab:String = ""
    var locklineschanged = false

    val entityUnitListMutex  = Mutex(false)
    val killPairsMutex = Mutex(false)

    /*
    This is the list of units. Any unit added to this list will get added to the map.
     */
    val entityUnitList =  mutableStateListOf<EntityUnit>()

    fun UpdateEntity(entity:EntityUnit)
    {
        if (!entity.isPositionValid()) {
            Log.e(ContentValues.TAG, "Datasource::UpdateEntity " + "Invalid entity passed:")
            return
        }
        entity.lifeTime_ms = System.currentTimeMillis() // update its life time

        try {
            // NOTE - FindEntity() call must remain OUTSIDE of runblocking and mutex because
            // FindEntity also has mutex and we do not want to nest mutex calls. Deadlock may occur
            val existingEntity = FindEntity(entity.id)

            runBlocking {
                entityUnitListMutex.withLock {
                    if (existingEntity != null) {
                        entity.status = existingEntity.status
                        entity.missionCount = existingEntity.missionCount
                        val index = entityUnitList.indexOf(existingEntity)

                        entityUnitList[index] = entity

                    } else {
                        entityUnitList.add(entity)
                    }
                }// end mutex
            }
        }
        catch(e:Exception)
        {
            Log.e(ContentValues.TAG, "Datasource::UpdateEntity " + e.toString())
        }
    }
/*
Find the entity in the list of active entities
 */
fun FindEntity(entityName: String): EntityUnit? {
try {
var returnval: EntityUnit? = null
        runBlocking {
            entityUnitListMutex.withLock {
                for (i in entityUnitList.indices) {
                     if (entityUnitList[i].id == entityName) {
                       returnval = entityUnitList[i]
                       break
                    }
                }
            }// end mutex
        }

        return returnval
} catch (e: Exception) {
Log.e(ContentValues.TAG, "Datasource::FindEntity " + e.toString())

return null
    }
}

My understanding of kotlin and android is that you need to use a coroutine if you want to use a mutex. I used a mutex to protect the shared resource, the entityUnitList of type mutableStateListOf<EntityUnit>

The Listener is started up on the main, UI thread however it uses its own thread to receive udp packets. The call to Datasource::UpdateEntity() is done in that thread, not the UI thread. Datasource is used by the UI thread as well and it needs access to the entityUnitLst to read from. The UI thread does not write to any of the elements in the list nor does it add or subtract elements from that list.

So the problem is the app will lock (not crash and disappear) and be non-responsive or frozen. This happens at various times but typically within a minute or two. My best guess is a thead race condition.
There was someone else developing the UI portions of this app and they said the UI only updates when a data element of it changes. So in UpdateEntity() these two lines do cause a UI refresh.

Code:
entityUnitList[index] = entity
...
entityUnitList.add(entity)

Here is another place accessing that list and is in the UI thread

Code:
fun PutStuffOnMap(
    uiState: FOXUiState, mapView: MapView, onEntityClicked: (entityClicked: String) -> Unit
) {
    try {
        val items = ArrayList<OverlayItem>()

        runBlocking {
            Datasource.entityUnitListMutex.withLock {
                for (i in entityUnitList.indices) {
                    val entity = entityUnitList[i]
                    PlotEntity(mapView, entity)?.let { items.add(it) }
                }
            }// end mutex
        }
. . .

There is more to that function but that function is called from here in a global method tha tis used in the map drawing code.
Java:
@Composable
fun MapRow(
    uiState: FOXUiState,
    onEntityClicked: (entityClicked: String) -> Unit,
    modifier: Modifier = Modifier){
    Row(modifier = modifier) {
        AndroidView(
            factory = { context ->

                MapView(context).apply {
                    SetUpMap( uiState, this, onEntityClicked)
                }
            },
            update = {
                    mapView ->
                PutStuffOnMap( uiState, mapView, onEntityClicked)
            }
        )
    }
}

I am thinking we have a mutex locking unlocking issue where it stays locked and the UI blocks with that runBlocking{ } block waiting for the unlock. The Listener gets in and gets out when updating the entity pretty quick. The only link to the UI thread is Datasource::UpdateEntity(). When we comment out UpdateEntity() we never deaklock or freeze the app. We can even pre-load entityUnitList with entity class elements and interact with them again with no app freeze. Its only when we enable getting movement updates over ethernet (using USB/Ethernet adapter plugged into the tablet) when we freeze the app eventually.

So I think using runBlocking is wrong so what is the correct way to share that entityUnitList over multiple threads safely? We do not have to use a mutex and we could consider other list types that are better with thread synchronization.

-Steve
EDIT wow this post is long, I apologize! Just wanted to give enough details.

Implementation of Runtime Resource Overlay from Vendor Directory , For my Learning Purpose.

How to Implement Both Static and Dynamic Runtime Resource Overlay for an Android Automotive Product from Vendor Directory of AOSP 12L ?

Using Runtime Resource Overlay, How to change the whole appearance of that Automotive Product, Like the overall Appearance of SystemUI and other Applications.

Can someone please help me with this?

  • Question
Make Lock Screen Music Player Full Screen?

Hi all,
Just switched from iOS to Android (wanted to try the ZFold4) and one of my biggest dislikes that I can't get past is the lockscreen music player. Is there anyway to display that full screen (like iPhones do)? I have YouTube Music but would certainly use whatever app would just make it fullscreen lol. Appreciate your help all!!!
1697731516814.png

  • Question
Accessing learned words in Samsung Galaxy keyboard

Hi! I'm currently sharing a phone with someone who's being pretty shifty and I just need some help.
I was typing an email address in the search bar of a browser on the Samsung Galaxy a12 we share when a whole bunch of suggestions popped up. They were all usernames ( @username ) in the suggestion part of the keyboard and when I hit the ... to view more, a whole lot of others showed up as well. I went to write them down but the problem is I only got to click on two of them before they ALL stopped showing as suggestions in the keyboard.
I'm not sure if it was an accidental glitch and I was never supposed to see those suggestions pop up at all, but the fact that they did means they've got to be stored SOMEWHERE in the phone... Right? Is there any way to access that data- anything I can try? Is there a way to hide the "learned words" that I don't know about? Could they have installed and hidden a whole separate keyboard altogether? The keyboard is just the Samsung keyboard, not GBoard and the phone is not rooted. Is there a way to do that myself in order to access that data?Any help would be really appreciated, thank you!I tried looking up the answer for this already but I'm not really getting the answers I need.

  • Question
How to stop Play Store from updating itself in Android 5.1

Hello, Android forums. I have a very towering question I need to stop the Play Store from updating itself, not its apps. I need to do this because of towering size constraints on my phone. Then your Play Store versions, or way too big, and need a way to stop them from updating themselves. The old versions work fine and I. And I don't know why it updates itself. I do not. I do not need a solution on how to stop updating the apps. I need a solution. I have to stop the Play Store from actually updating itself. Because the new Play Store versions are way too big. I am also using a ZTE blade A452 (And no, I cannot root my phone I have tried and I cannot There are too many risks)

Issues with signing app on Android Studio

I am just at the end of my app development cycle but unfortunately I can't sign the app bundle to upload it to the play store. When I attempt to use the "Generate signed APK" function it throws up this error message after I've put in the details of the keystore and moved on:
java.lang.AssertionError
at org.jetbrains.android.exportSignedPackage.ExportSignedPackageWizard.doOKAction(ExportSignedPackageWizard.java:155)
at com.intellij.ide.wizard.AbstractWizard.proceedToNextStep(AbstractWizard.java:237)
at com.intellij.ide.wizard.AbstractWizard$5.actionPerformed(AbstractWizard.java:199)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6656)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3385)
at java.desktop/java.awt.Component.processEvent(Component.java:6421)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2804)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:790)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:731)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:763)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:761)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:760)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:909)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:831)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:753)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$5(IdeEventQueue.java:437)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:787)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:436)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105)
at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:615)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:434)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:838)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:480)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121)
at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)
at java.desktop/java.awt.Dialog.show(Dialog.java:1080)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:743)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:467)
at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1676)
at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1634)
at org.jetbrains.android.exportSignedPackage.ExportSignedPackageWizard.show(ExportSignedPackageWizard.java:168)
at org.jetbrains.android.actions.GenerateSignedApkAction.actionPerformed(GenerateSignedApkAction.java:62)
at com.intellij.openapi.actionSystem.ex.ActionUtil.doPerformActionOrShowPopup(ActionUtil.java:327)
at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:306)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:350)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:306)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$performAction$5(ActionMenuItem.java:296)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:226)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.performAction(ActionMenuItem.java:289)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$new$0(ActionMenuItem.java:64)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$4(ActionMenuItem.java:111)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:111)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:526)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:558)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6656)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3385)
at java.desktop/java.awt.Component.processEvent(Component.java:6421)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2804)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:790)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:731)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:763)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:761)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:760)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:909)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:831)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:753)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$5(IdeEventQueue.java:437)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:787)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:436)
at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:113)
at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:615)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:434)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:838)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:480)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

Any help would be greatly appreciated, thanks for reading

  • Question
Help How can I reinstall Android on my car's tablet display?

I bought a used Toyota Corolla Hybrid 2020. The previous owner apparently replaced the stock display with a tablet that runs Android. The connections seem fine (power, stereo, BT, Wi-Fi). But the UI is clunky, there's no access to the Play Store, and in general the OS seems unofficial.

How can I wipe the system and replace it with a legit Android OS, preferably Android Auto? Is it possible through a connected phone/computer (via BT, Wi-Fi, maybe USB)?

The current system's info is:
  • Model: V8AUTO-MX6Q
  • Android version 4.4.2
  • Baseband version Unknown
  • Kernel version 3.0.35

Thanks!

  • Question
question – SMSs, full date, apps

Hi

I wonder whether anyone could help

Android 13’s SMS messages don’t display the full date (day, month, year –- any format would be fine)

WhatsApp for Android. Same problem.

All we get, is “Yesterday”, or “Monday”, etc etc.

In Android, is there a free third party app (for SMSs) that performs the miracle of displaying, on each SMS, by default, the full date (day and month and year –- it doesn’t matter which format) ??​

PS:: we’re aware that, on Android, you can press+hold a message, click on “View” etc etc. But the mere fact we’ve got to do that, is time-consuming, clunky, and the details, when they appear, cover most of the SMS, so it makes it useless if, for example, you wish to take a screenshot of the relevant SMS.

Thank you for your kind help

Christian

  • Question
Offline Notes App?

Hi all,

I've been looking all over the Android App Store for a Notes App that doesn't need to connect to the Internet.
On my very old Huawei G510-0200 it came with a Notes App that works completely independent from the Internet and this is great. However, it seems like everything wants to connect to the Internet... :(

My Huawei phone link: HUAWEI G510-0200 Specification

Thanks for any help!!!

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones

Filter