# Question
Title: Do wireless charging adapters interfere with NFC?
I've just got a Huawei P30 (standard, not Pro or Lite) and realised it doesn't feature NFC - with no less than 4 wireless chargers in my house and 2 in my office. But I use Google Pay all the time - in many ways I rely on it.

I've done some Googling and I can't find much info about this - the closest I came was an article about wireless charging slowly damaging the NFC controller chip over time in a Nexus 7 due to a circuitry flaw.

Would adding a Qi adapter pad inside a case affect the data-only NFC on the device? With it not being a native feature, I can imagine there may be some safety drawbacks to the internal antenna and circuitry.

But at the same time, Huawei had an official wireless charging case available. So, maybe it's not a problem for the P30?

# Answer
TLDR; Qi wireless charging can damage NFC tags and readers.

I don't have any experience with using Qi adapters and NFC in conjunction but I would imagine there would be some interference.

Depending on the position of your NFC chip, the Qi adapter may partially or completely cover the chip. Whilst this would only be a very thin layer of metal obstructing the chip, the interference would largely depend on the quality of the NFC chip.

I do have a wireless charging mount in my car that I have previously placed an NFC tag on. I was able to charge my phone (Samsung Galaxy S7 Edge and Note 9) perfectly, however, my phone struggled to consistently read the NFC tag. It would often either not read the tag at all or would repeatedly read it, which was very frustrating as the routine I had set up would send multiple messages to my wife.

So, it would seem that wireless charging and NFC can interfere with each other if not implemented correctly. If this is a risk you can not afford to take, then I would suggest sticking with a charger cable or perhaps a magnetic charger cable for more convenience.

---

Following OP's comment I have done some more research regarding NFC degradation caused by Qi wireless charging and have come across this article from RFID Journal.

The article details an NFC-enabled wireless charging system for cars and, although it doesn't specify any sort of statistics, it does state that NFC tags can be damaged by wireless charging.

> NFC devices are also commonly stored in the wallets, purses and pockets of individuals for payments, access control and more. NFC tags, however, can be damaged or destroyed by the magnetic fields of wireless chargers, creating a potential conflict for a variety of NFC technology products

I wasn't completely satisfied with this.

I changed my search criteria to specifically look for details on NFC readers and it wasn't long before I cam across a post on the Nordic Semiconductor DevZone forum regarding Qi wireless charging damaging an NFC reader. In the thread one of Nordic Semiconductor's support staff responds with the following

> Yes, QI currents can damage NFC readers/tags, and what you're describing does not seem reversible. Sorry about that. Although we can't guarantee anything, adding the extra capacitor seems to protect the NFC tag sufficiently, so I suggest you give it a go. Additionally, it wouldn't hurt disabling the NFC while you're charging either, but I don't believe it to be crucial.

So, given this information and OP stating that NFC doesn't work with wireless chargers (at least that's my understanding of OP), I would be inclined to believe Huawei disables the NFC reader while charging wirelessly in order to protect the NFC reader from damage.
> 1 votes

---
Tags: nfc, wireless-charging
---


# Question
Title: How to resize the width of several frozen columns in Google Sheets app?
I am using Google Sheets on Android and have several columns frozen on the left, but the app seems to have a fixed width for the frozen columns. Is it possible to change this width?

# Answer
Unfortunately, you can't with the current version (1.19.432.04.34) of Google Sheet. Maybe it will be possible to do it with future version. For a once off (or maybe permanently), WPS allows to increase the width of frozen columns.
> 5 votes

---
Tags: google-sheets
---


# Question
Title: Root to set a battery limit and unroot again?
I dont have any practical experience with rooting my phone. There is one thing that's been bugging me for a very long time: I need to be able to set a charging limit on my Pixel 2 since I dont feel like replacing the battery soon and destroying the water resistance.

My question is: if I root and set a charging limit and unroot again, will this setting be erased? As I said, I am not too familiar with the risks of having my OS more vulnerable towards viruses, thus the only thing I want to do is to set the battery charging limit and then just go back to unroot.

Thanks, Alex

# Answer
Setting a charging limit is not persistent. Therefore the call has to be made (with root permissions) at least once after every reboot.

Rooting/unrooting requires at least a reboot. Therefore you can't "temporarily root" your device and set a charging limit.

If your device does not provide something like an intelligent battery charging optimization the only alternative is to use a battery charging notification app.

There are a lot if battery charging notification apps on Play Store. One example is Battery Full Charge Alarm which can be configured to notify at a specific charging level.
> 2 votes

---
Tags: root-access, battery-life, unrooting, google-pixel-2
---


# Question
Title: How to always resolve a domain name to a fixed IP without rooting?
The financial website `https://wex1.in` got it’s domain name deleted but it’s still possible to reach it by adding `104.25.31.35 wex1.in` to etc/hosts files on a ᴘᴄ.

So how to access the website without editing `/etc/hosts`?

# Answer
There are a few options you can go with:

* **Enter IP address** directly (with port `80` or `443`) to web browser's address bar instead of domain name. But this won't work if web server relies on `host` header or SNI for virtually hosting multiple websites on same IP address.
* It's possible to use VpnService API of Android to capture all DNS traffic without rooting phone. That's how apps like this and this work. Then the **VPN app may use a custom `hosts` file** before making queries to configured upstream DNS server. Virtual Hosts is an open-source app to achieve this.
* As suggested by @iBug, you can setup a **DNS server** (locally or on cloud) and configure your phone to use that for DNS queries. For instance if using `dnsmasq`, add `address=/wex1.in/104.25.31.35` to *“dnsmasq.conf”*. Or on `dnscrypt-proxy` add `wex1.in 104.25.31.35` to *“cloaking-rules.txt”*.
Similarly other DNS servers can be configured to return a predefined IP address for a specific name.
* Configure phone to use a **proxy** or **VPN** and then add the entry `104.25.31.35 wex1.in` in `hosts` file on proxy server or run a local DNS server on VPN server.
* If you don't want to root the device but bootloader is unlocked (or possible to unlock) and a custom recovery is available, mount `/system` in recovery and **edit `hosts` file** there. Set proper permissions; ownership, mode and SELinux label.

If you don't want to modify `/system` partition (e.g. to not break `dm-verity` or OTAs), it's possible to bind mount a custom `hosts` file from somewhere on `/data`. But that would require some extra effort like defining an `init` service, modifying SELinux policy etc.

Make sure not to use Private DNS (on Android 9+) so that DNS queries always go on port `53` unencrypted.

**PS:** Same methods can be used to block ads without rooting phone.
> 4 votes

---
Tags: dns, hosts
---


title: How to block access to a website?

text:
# Question
Title: How to block access to a website?
Is there any way to block access to a particular website through the stock Android browser?

# Answer
If you have root, you can mount the systems partition as editable and edit the hosts file and set the site in question to redirect to 127.0.0.1. This is somewhat complicated voodoo, however, and I wouldn't recommend it if you don't know what I'm talking about already.

However if you don't want to do this manually and have rooted your phone, the app Hosts Editor is a nice little single purpose utility just for this.

If you're up for the voodoo, and have ADB installed:

1. From the terminal invoke the adb command with remount option otherwise you will get "failed to copy 'hosts' to '/system/etc/hosts': Read-only file system".

`adb remount`
2. In the terminal pull the default hosts file from /system/etc/hosts or /etc/hosts which is the symlink of the file not only for backup purpose but also to get the file to modify.

`adb pull /system/etc/hosts <path to pull hosts file to>`
3. Modify the file according to your needs. (eg) 127.0.0.1 www.somewebsite.com
4. Push the file back to the phone:

`adb push <path you pulled hosts file to>/hosts /system/etc/`
5. That's it. You can check it out from the shell:

`adb -e shell`

`cat /system/etc/hosts`

source
> 1 votes

# Answer
The simplest way to block access to a website is by adding that domain name to `hosts` file as mostly DNS resolvers honor that file. But it's not possible to edit `/etc/hosts` without rooting Android device. Here are a few options you can go with on unrooted device:

* Use a VPN app which intercepts DNS traffic and looks up a custom `hosts` file before making queries to configured upstream DNS server.
* Run a DNS server; they can be configured to return a predefined IP address for a specific name. For instance if using `dnsmasq`, add `address=/xyz.com/0.0.0.0` to *“dnsmasq.conf”*. Or on `dnscrypt-proxy` add `xyz.com 0.0.0.0` to *“cloaking-rules.txt”*.
* Configure phone to use a proxy or VPN and then add the entry `0.0.0.0 xyz.com` to `hosts` file on proxy server or run a local DNS server on VPN server.
* If bootloader is unlockable, edit `hosts` file from custom recovery.

For more details see: How to always resolve a domain name to a fixed IP without rooting?
> 1 votes

---
Tags: browser, dns, firewall, hosts
---


# Question
Title: How to clear cache of Android's built-in podcast player?
In 2016, Google launched a secret unnamed podcast player. If you search for a podcast, a special player app will appear. This app lets you:

* play podcasts in the background
* with the phone locked
* remembers where you are
* offers to add a link to your home screen

The problem i'm having today is that it's not letting me scroll back to older episodes of the podcast i've been listening to. And any attempts to go back to the web-site causes the *"secret"* player to appear, where it again only lets me see the last few episodes.

I want to clear the cache for this app, so that it doesn't think i've seen it before.

The only problem is that this secret unnamed podcast player doesn't have a name; i don't know what **App** to clear the cache for.

# Bonus Reading

# Answer
Settings -\> Apps -\> Search 'Google PodCast' -\> Storage -\> Remove data / cache (I have Android version 9)
> 1 votes

---
Tags: google, cache
---


# Question
Title: How to screencap the smaller display of Samsung Galaxy Fold using ADB 'screencap' command?
I'm trying to take a screenshot of Samsung Galaxy Fold's smaller display.

I use

```
shell screencap -p /sdcard/testss1.png

```

but it only captures the main display ― which is off ― and gets a black image.

How to change the display used for capturing?

# Answer
The screencap command can be configured to capture a specific display using the option `-d`.

> -d: specify the physical display ID to capture. See `dumpsys SurfaceFlinger --display-id` for valid display IDs.

The output of `dumpsys SurfaceFlinger --display-id` is a bit longer, therefore you can filter out the display ids:

```
dumpsys SurfaceFlinger --display-id | grep display_id

```

On my device I only have one display with display\_id=0.

Therefore the final command looks like this (just replace display\_id):

```
shell screencap -d <display_id> -p /sdcard/testss1.png

```
> 5 votes

---
Tags: adb, shell, screenshots
---


# Question
Title: Android x86 Oreo (8.1) stuck at _ (underscore) after GRUB
I'm trying to install Android x86 on virtual machine in VirtualBox 6.0.

The image I've downloaded is `android-x86_64-8.1-r2.iso` from android-x86.org

The installation process I've followed is similar to this video

But when I'm reaching GRUB boot option selection and choose `Android-x86 8.1-r2`, it stops working and hangs on underscore before "Android" logo, which never shows to me.

I've tried this and this fix, but it didn't work. Also, there's a post regarding similar issue on Android Enthusiasts, but it never was answered.

Stack, what do?

# Answer
> 1 votes
Set `VM Settings` \> `Display` \> `Graphics Controller` to `VBoxVGA`. Unless done so, Android x86 won't launch.

More here.

---
Tags: 8.1-oreo, android-x86, virtualbox
---


# Question
Title: How to save files to external SD card on a non-rooted Android?
I'm using the Terminal Emulator app on a non-rooted Android 5.0.2 phone.

When **moving files from a folder of the external SD card to another** with:

```
mv /storage/extSdCard/DCIM/Camera/* /storage/extSdCard/phone/

```

I get:

```
mv: rename /storage/extSdCard/DCIM/Camera/20170519_161315.jpg to
     /storage/extSdCard/phone/20170519_161315.jpg: Permission denied

```

**Is there a solution for this (without rooting the phone)?**

---

*Note: `ls -la` in `/storage/extSdCard` gives:*

```
drwxrwx--x root     sdcard_r          2016-08-10 02:18 Android
drwxrwx--- root     sdcard_r          2016-11-20 09:45 DCIM
...
drwxrwx--- root     sdcard_r          2017-05-19 15:46 phone

```

# Answer
> 4 votes
Filesystem level write access to physically external SD card without rooting phone is not possible since pre-KK days. However apps can always (with or without Storage permission) read and write to their private directories on shared storages. So you can move files to `/storage/extSdCard/Android/data/`.

---

On Android 6+ external SD card is visible at `/storage/[UUID]` where UUID is that of filesystem. This filesystem path is only available for reading (to apps with `READ|WRITE_EXTERNAL_STORAGE` permission granted) and traversal (for all apps). Latter case is to let apps read/write to their private directories. Like internal emulated filesystem, permission control is implemented through mount namespace and `everybody (9997)` GID. SD card is mounted with three distinct *VIEWS* of different permissions:

`vold` creates an isolated mount namespace for every app and depending upon app's status of Storage permission, bind-mounts a *VIEW* to `/storage/[UUID]`. For detail see What is /storage/emulated/0/? and What is the “u#\_everybody” UID?

---

Since none of the three *VIEWS* has **write permission**, apps don't have filesystem level write access to public directories on external SD cards. However apps - like mostly file explorers - which make use of Storage Access Framework (SAF) (or Scoped Directory Access on Android 7+ or Scoped External Storage Access on Android 10+) are able to create and delete files on whole SD card.

---

USB OTG is treated almost in similar fashion, but with one prominent difference:

> *"MOUNT\_FLAG\_VISIBLE means the volume is visible to third-party apps for direct filesystem access.
...
transient volumes like USB OTG devices **should not** be marked as visible; their contents should be surfaced to apps through the Storage Access Framework."*

So USBs aren't exposed as *VIEWS*, instead apps see `/storage/[UUID]` (which is not an actual) filesystem path through SAF for both reading and writing. That's why contents of removable media aren't available through MediaStore too. Neither available to apps through APIs:

> *"The returned paths do not include transient devices, such as USB flash drives connected to handheld devices."*

Multiple external storage devices:

> *"External storage devices surfaced through these APIs must be a semi-permanent part of the device (such as an SD card slot in a battery compartment). Developers expect data stored in these locations to be available over long periods of time. For this reason, transient storage devices (such as USB mass storage drives) should not be surfaced through these APIs."*

However Adoptable Storage is always visible to apps, whether SD card or USB.

---

**RELATED:**

---
Tags: external-sd, file-system, storage, permissions, terminal
---


# Question
Title: How to port forward minecraft PE Server on android
I have set up a minecraft bedrock edition server on my android phone by setting up nukkit in an ubuntu for ARM being emulated in termux terminal emulator for android and it runs pretty well and I can connect to it from my own device. But now I want to port forward it so that it is accessible from anywhere in the world, but guides online say that you need your router ip...blah,blah,blah but I dont have a router, I am using the 4g network provided by jio. How can I get my server running online?

# Answer
> 0 votes
Use the ifconfig command baked into basically every android version. You can access it by installing a terminal emulator. However, you might not be able to access the Server running on your Device due to your provider blocking incoming connections to all mobile devices for "security reasons", or at least that is what my provider told me when I was trying to host a http web server on my android device.

# Answer
> 0 votes
On 4G network you don't get a public IP (mostly) from your MNO. So your phone won't be accessible from internet. Related: How to connect to Android through SSH over 3G/4G public IP?.

However if your device is accessible from internet, you don't need to do port forwarding. It's required only when you are behind NAT (router), but you are directly connected to internet. In case you create hotspot on Android and run server on some connected host, then you can forward port this way: How to port-forward internet using android Hotspot?

---
Tags: networking
---


# Question
Title: Does /dev/block/mmcblk0 include an external sd card that has been formatted as internal?
I am performing a backup using the following command with a su shell:

`dd if=/dev/block/mmcblk0 of=/mnt/expand/ee131623-1634-25d1-9f9f-902b68eceaee/mmcblk0.img"`

And I was wondering if this would fail to complete as it would include the backup in the backup?

Is Internally formatted external sd cards included in `mmcblk0`?

# Answer
> 3 votes
No. Internally formatted external sd card is not included in `mmcblk0`. `dd` dumps files, in your case the block device file `mmcblk0` which includes all partitions, GUID partition table (GPT) and any free space in between partitions.

External SD card is a separate flash memory chip, so exposed by a different block device available at path something like `/dev/block/mmcblk1` or `/dev/block/sda`.

---
Tags: backup, storage, internal-sd, formatting
---


# Question
Title: Can I flash Android on device with overwritten mmcblk0?
Can Android device with fully overwritten `/dev/mmcblk0` (without `/dev/mmcblk0p*` partitions) be still flashed using fastboot? Is it true that overwriting `/dev/mmcblk0` does not remove `/dev/mmcblk0boot*` partitions?

# Answer
> 4 votes
`/dev/mmcblk0` is whole MMC storage chip which includes GUID partition table (GPT) and all partitions. On Android devices some of these eMMC partitions hold bootloaders (like `sbl`, `aboot` on Qualcomm devices) which have hard-coded paths in SoC firmware. Fully overwriting (erasing) such partitions means the SoC won't be able to boot device. Since `fastboot` and other service modes like `odin` are hosted by bootloaders, so those won't be available and the device is considered hard-bricked.

Exceptions are if the device does have BIOS/OpenBIOS/UEFI/ACPI support and is able to discover hardware without DTB and boot initially without depending on bootloaders.
Or if there is a way to re-create partitions and re-write bootloaders (see MTK example in edit section below). Something at even lower level which can communicate directly to SoC e.g. JTAG protocol can be possibly used to bring device back to life. However that requires special hardware and software and sometimes desoldering/resoldering or even chipping off flash chip. Still after recovering the device that way, you will have to restore device-specific partitions e.g. the one which contains IMEI.

`/dev/mmcblk0boot*` naming convention is usually used to represent boot area partitions from internal MMC on Linux while `/dev/mmcblk0p*` represents user area partitions or partitions on external SD card. Android `init` enumerates eMMC partitions as `/dev/block/mmcblk0p*` and external SD card partitions as `/dev/block/mmcblk1p*` (as far as I have seen). But the nomenclature may differ for different vendors. Whatever the case is, overwriting a whole flash memory raw block device would erase all partitions on that.

---

**EDIT:**

I just realized you are talking about eMMCs used with development boards, not on Android phones. Latter is somewhat different, it can have 50+ partitions on recent devices. Many of those are vendor-specific closed source signed binary blobs. But the eMMCs used with Linux have a few partitions (not more than 8 per block device by default).

If that's the case, `/dev/mmcblk0boot*` are most probably separate block devices as per eMMC v4.41 standard. So those might have not been erased with user area partitions. Boot partitions are also write-protected by default (, ), while Android devices mostly use user area for booting (though vendors can go other way) which is easily erasable. eMMC v4.41 also defines RPMB partition which is also a separate block device (in fact not a block device and not a partition) and shouldn't be deletable.

---

On an Android device with Qualcomm SoC (MSM8953) and Samsung eMMC (`RX1BMB`) and without boot area partitions:

```
~# mmc extcsd read /dev/block/mmcblk0
  Extended CSD rev 1.8 (MMC 5.1)
...
Boot configuration bytes [PARTITION_CONFIG: 0x38]
 User Area Enabled for boot
 No access to boot partition
...
RPMB Size [RPMB_SIZE_MULT]: 0x20

```

Another device with MediaTek SoC (MT8127) and Hynix eMMC (`H8G1e`) does have two boot area partitions and an RPMB. It reports *"Boot Partition 1 enabled"*, so `mmcblk0boot0` contains first stage bootloader (preloader or SPL) while actual `UBOOT` is on user area (`mmcblk0p4`). `mmcblk0boot1` contains device specific information available through `idme print` like MAC address, serial number, unlock code etc. However another SoC (MSM8610) with same eMMC reports *"User area is enabled for boot"*. So this seems to be a vendor-specific thing.

---

Again, since `fastboot` is implemented in U-Boot, it won't be available after erasing `mmcblk0`. On MTK devices, though, Preloader Download Mode (SP Flash Tool) or the even earlier EDL mode (*"On-chip boot ROM for factory flash programming"*) should still work (if implemented). EDL mode on some MTK (*Meta Mode*) and Qcom (QDL/9008 mode; implemented in PBL/BootROM) devices requires shortening test points on motherboard (, ).

Otherwise the only way to flash partitions is by directly communicating with SoC. `i.MX` SoCs, for instance, provide SDP protocol over USB or UART which can be used to load U-Boot and use `fastboot`.

**NOTE:** Don't confuse Android's fastboot with eMMC Fast Boot.

---

**RELATED:**

---
Tags: rom-flashing, fastboot, boot, bootloader, unbricking
---


# Question
Title: Tracking push notifications that I receive on my android phone
I'm trying to set up a tracker that stores text messages and push notification that I receive on my phone in a google sheets spreadsheet. I have already found a way to forward each SMS that I receive to a spreadsheet using IFTTT. Unfortunately, it seems that IFTTT does not allow you to track push notifications as well.

**Question:** (If it's possible) How do I set up tracking push notifications on an android phone?

# Answer
Google push notifications are handled differently than SMS. AFAIK only Google Play Services app has access to all push notifications (as it receives them). Therefore getting those push notifications would require to inject code into Google Play Services, e.g. in form of an XPosed module (requires rooted device + (ed)Xposed installed).

BTW: The push notification often does not contain the actual data. It can be used to "poke" an app so that the app connects to it's backend and loads the actual data (e.g. a messenger message).
> 1 votes

---
Tags: applications, sms, push-notifications
---


title: Linux on Android and HW support

text:
# Question
Title: Linux on Android and HW support
I see that there are some projects about installing Linux on an Android Device, but how is the Hardware support?

If I install linux, can I have access to the hardware via Python, like in Android?

# Answer
> 4 votes
Technically you don't "run Linux on Android". In fact, every Android device runs "under" Linux (That is, Android uses the Linux Kernel). What happens when you install a Linux *distribution* (I think that is what you meant by refering to Linux) on Android is that the Android OS and the Linux dsitribution share the same Kernel. Even if you replace the Android installation with a pure (GNU/)Linux one, the used Kernel is *"the same*".

**Therefore the HW API calls are identical, and you can access the hardware from e.g. Python without any difference.**

# Answer
> 1 votes
An Android app now allows device users to add custom versions of multiple Linux OS.

Andronix allows unrooted Android users with \> 2.5GB free and Termux on Android 5.1 or newer to install Ubuntu and other Linux OS with Xfce, MATE, LXDE, LXQt, and KDE desktop environments. The basic app is free and runs on devices with ARMv7, ARM64, and x64 CPUs; the publisher sells customized Linux distros through the Google Play Store.

---
Tags: hardware, linux
---


# Question
Title: I set a 20 character password using Find My Device, but the lock screen only accepts 16
I used Find My Device to set a 20-character password for my phone (it accepted the password without any error messages as shown in the picture below). After I got my phone back, I went to type in the password on the lock screen, but I could only type in 16 characters.

>

I saw on Password too long to type in android device.Locked out from android device manager that mentioned the lock screen would accept the truncated password, but my phone does not unlock with the truncated, 16-character password.

I don't want to resort to a data erase, since I have important texts and memos, and also some contacts I don't want to lose. Is there any solution to this?

# Answer
> 0 votes
For other people with this problem - I found out that sometimes the manufacturer of the phone can unlock it or even back-up your data before a factory reset, if you go to one of their service centers. In my case, my phone is a Samsung, but my local service center still couldn't do anything because my specific model number wasn't supported. They said they support the "popular" models like the Galaxy S series or the Note series.

So the first step would be to contact the manufacturer and see if they provide repair services for your phone. Otherwise, after this past week of research, it seems the only solution is to factory reset and wipe your data.

# Answer
> -1 votes
I would try using `Find My Device` again for setting a new 16-character password.

---
Tags: lock-screens, locked-out, lost-phone, android-device-manager
---


# Question
Title: Google just EOLed the original Pixel. How long until it's a brick?
Google has declared EOL for the original Pixel. I got my Pixel for a Google Fi account I use just for travelling, and I'm not really interested in replacing it. Realistically, how much longer can I use my original-release Pixel before it stops functioning?

# Answer
Theoretically, the OG Pixel will work indefinitely until there's an irreparable software/hardware issue. Realistically? Depends on how the user takes care of it ;)

"End of Life (EOL)" doesn't mean that the device will end its life. It is just that the manufacturer (in this case, Google) will stop its *support*; no more security & OS updates, and the like.

If the user is adventurous enough, they can unlock the bootloader (warning: will delete all the storage) and flash custom ROM which at least extends the life a little further. (In addition, seems it's also compatible with Project Fi).

---

Anecdotal evidence: I'm using Nexus 5 which was released in 2013 (Android 4.0 Ice Cream Sandwich) and EOL in 2016 (Android 6.0 Marshmallow). I flashed Lineage OS after that until it's not maintained (Android 7.1.1 Nougat). As of 2019, the phone is still usable in daily life.
> 44 votes

# Answer
If Google declares a device to be "EOL" this simply means that you no longer receive device and security updates.

Therefore your Android devices will not stop working, however after the point of EOL the chance of a security vulnerability that allows to attack you and your data will continuously raise.

However as Google devices can be unlocked easily you don't have to accept this. Unlocking the bootloader allows you to install an OS that does not come from Google, like LineageOS (warning: unlocking will erase all user data). The first Pixel (code name "sailfish") is a supported device by LineageOS. Therefore you can download and install LineageOS on your device and again receive updates until LineageOS also drops support for your device.

But there are also some draw backs of unlocking and installing LinegeOS: Some device assume that LineageOS devices are rooted and therefore insecure (they just assume that in general, independendently of the reality). Therefore apps like GooglePay may refuse to work.
> 14 votes

# Answer
In reality, i'd say a few years until it loses his usefulness. I have a 2 old phones that still work if plugged in, but a lot of the apps now fail because the API endpoints changed. Google maps won't load any maps or autocomplete searches, and only shows me a dot on a grey screen if GPS is turned on. YouTube videos wont play anymore, neither with the official app nor via browser. I think the webbrowser has some issues with SSL certificates that are now required everywhere. In the best case you get a message to update your software, but then the google PlayStore tells you that the latest app version is not supported by your android version.

The hardware, phone and text messages might still be working in 10 years, but eventually your apps wont be supported anymore.
> 3 votes

# Answer
In one respect it became a potential brick the day after your warranty ended, as it'd doubtless be uneconomical to repair. But it's not going to get 'turned off'. It'll work until it breaks.

I have a Pixel C with unresponsive screen. Effectively a brick. Pity. It was a nice machine.
> 0 votes

---
Tags: google-pixel
---


# Question
Title: Email rejected by Yahoo! but Android's Mail app keeps trying to resend
I am using Android's Mail app on my Motorola DROID RAZR M for my Yahoo! account. Last week, I tried to "reply to all" on an email that was sent to over 100 people and Yahoo! rejected it, claiming it was suspicious activity. That's okay, but the email is kept being resent. Every few minutes I get an error message on my phone saying that the email was not sent.

What I have tried:

1. I deleted it from the drafts folder in my Yahoo! account, but that didn't help.
2. I see the message in the "Outbox" but I can't do anything to it there. When I touch it, I get a message saying "Cannot open message. Message is currently being sent and is unable to be opened."
3. I stopped the app from running but it still won't let me do a/t to the email in the outbox.

How do I get my Razr to stop trying to resend the email?

# Answer
Your emails might be set up as "auto resend". Go into email options, and select none.
> 0 votes

# Answer
Based on the asker's (now deleted) comment:

> I turned off mobile data and WiFi and then I was able to delete the email from the outbox. Looks like this worked.
> 0 votes

---
Tags: email, stock-email-app
---


# Question
Title: Can SMS be received by Samsung's smart watch if a third-party SMS app is used?
I own a Samsung S7 and the phone is connected to my Samsung Galaxy Watch Active.

Is it possible to use another SMS app in order to get the SMS on my watch rather than the default Samsung application?

# Answer
Yes.

I have a Galaxy Note 9 and a Galaxy watch and I use Yaata SMS.

You don't get any extra features that you would get in the 3rd party SMS app but you can still read and reply to text messages the same as you can with the default app.
> 1 votes

---
Tags: sms, samsung-galaxy-watch-active
---


# Question
Title: How do I access `$HOME/storage` outside of Termux (with a file explorer)?
How do I access `$HOME/storage` Termux directory on Android Pie with a GUI File Explorer?

In Termux I print the working directory with `pwd` and it shows `$HOME/storage` as:

```
/data/data/com.termux/files/home

```

My internal storage looks like this:

```
.
├── Alarms
├── Android
|   ├──data
|   |  ├── ...
|   |  ├── com.termux
|   |  |   └── files
|   |  |       └── 0 items
|   |  └── ...
|   └── ...
├── DCIM
├── Download
└── ...

```

My external storage looks like this:

```
.
├── Android
|   ├──data
|   |  ├── ...
|   |  ├── com.termux
|   |  |   └── files
|   |  |       └── 0 items
|   |  └── ...
|   └── ...
└── LOST.DIR

```

Neither my internal storage, nor my sd card, contain a `/data/` directory at the root level. Where is this `/data/` directory? For that matter, where is the root `/storage/` directory? Where is the root `/emulated/` directory? Where are any of these directories and why cant I access any of them?

# Answer
If you did `termux-setup-storage` previously, create `random_file.txt` file in `$HOME/storage/shared`. That'll be created on `/sdcard/`. But you don't need to do that hassle. Just grant Termux Storage permission and save directly to `/sdcard/` e.g.

```
echo xyz >/sdcard/random_file.txt

```

`$HOME/storage` is actually `/data/data/com.termux/files/home/storage` which is not accessible to other apps without root access. That's how Android's security is designed.

> Where is this `/data/` directory?

It's a partition named `userdata` mounted in rootfs at `/data`. For details see How disk space is used on Android device?

> where is the root `/storage/` directory?

It's also a directory in rootfs where `tmpfs` is mounted. Contents of this directory look different to different apps because of mount namespaces and filesystem emulation.

> Where is the root `/emulated/` directory?

It's at following three locations:

```
/mnt/runtime/default/emulated
/mnt/runtime/read/emulated
/mnt/runtime/write/emulated

```

> Where are any of these directories and why cant I access any of them?

These directories are what you see when you open a file explorer app. Emulated filesystem path is `/sdcard`.

On Android 6+, `/data/media` is emulated to three *VIEWS* mentioned above. One of those is bind-mounted to `/storage/emulated` depending on app's Storage permission status. `emulated` directory contains User\_ID's of all users (if there are multiple users or profiles). Device owner is always `0`. So `/sdcard` points to `/storage/emulated/0`. It's the storage which apps can read and write.

Additionally apps can read and write to their private data directory in `/data/user/<User_ID>/` (which is `/data/data/` for device owner). For details see What is /storage/emulated/0/? and What is the “u#\_everybody” UID?.

From your comment:

> Can Termux write to the actual SD card physically inserted into my phone? If so, how?

Apps don't have filesystem level write access to external SD card except those using SAF APIs. Quote from official documentation, Termux doesn't have support for SAF:

> ***Why does Termux have read-only access to the external SD card?***
>
> *On recent Android versions, the write access to the external SD card is done over Storage Access Framework. It is not possible to provide it's API to the command line programs*.

However apps can always (with and without Storage permission) read and write to their private directories in shared storage i.e. in `Android/data/` directory (and some others) on `/sdcard/` and external SD card. For details see How to move files to external SD card on a non-rooted Android?

From your comment:

> So basically I don't have access to my own devices root directory, without rooting the device? I can only start at the third level? That's frustrating.

`/data` partition also contains system settings including sensitive data like password databases (though not saved as plain text). So `/data` isn't accessible without root in order to:

* Protect apps' private data from other apps (every app is a UNIX user with unique UID)
* Protect system data and settings from bad apps and malware
* Isolate users/profiles from other users/profiles
* Not let apps access shared storage without Storage permission granted
* Enforce APIs by Android framework so that apps can't use system resources and read/manipulate device information and settings without proper permissions

And possibly there are other reasons. For details see Are multiple-users protected from each other differently than apps?
> 6 votes

---
Tags: applications, internal-storage, sd-card, storage, termux
---


# Question
Title: Device got stolen. How to see its activities using my computer?
I have 2 mobile devices using the same Gmail account. One of them got stolen. The thief has used my Gmail account and also search.

How can I see the browsing history of the stolen mobile? I already searched in Google activity, and it shows activity for the device I still have. How to find the activity of the stolen device in my Google account? And how to trace the stolen mobile's IMEI and find out which person has it?

# Answer
> 1 votes
Assuming that your goal is finding out where is your phone, there are multiple scenarios. I will cover two of them:

* If you can find the mobile phone on "Your Devices" section (find it here), access it and press "More details" so that you can find the IP address. With the IP address one can find the location, bu using, for example, WHOIS IP Lookup Tool.
* If you were using "Find My Device" (with all the musts), access the Find your phone section.

---

If you can't find your phone, report the situation to the police and hopefully they will be able to help you.

Then, consider changing your Google Account password.

# Answer
> 0 votes
All you do is go to devices under google+ and search the history of that device you're looking for. If it's still attached and being used then you know you can locate it from the find my phone app \>\>IF \<\< your location is turned on on the device. You can also wipe it and make it ring really loud Bob stop for 5 minutes when you get close to it making it easier to find or whenever.

---
Tags: lost-phone, xiaomi-redmi-note-4g
---


# Question
Title: IMEI Invalid - Lenovo S860, rooted android 4.4.2, nothing works
I saw and tried more than 10 ways to repair the IMEI, including rooting the phone, connection to PC, mobile terminal emulator, but nothing works.

The phone is 2GB RAM Lenovo S860. It has 2 sim card slots (I'm using both) 3G and 2G respectively. (I cannot post link because of low reputation, gsmarena has specifications for my phone)

I accidentally deleted the system folder, after which the phone bricked, but I managed to repair it using the following android verion (http://www.needrom.com/download/rom-stock-4-4/) as an upgrade to (http://www.needrom.com/download/lenovo-s860/), both installed using PC.

Now I have the IMEI problem and I really need quick fix because I need the phone for work.

# Answer
> 1 votes
I am using MTK Engineering Mode app from Play Store to restore my lost IMEI after flashing ROM. You should know your previous IMEI number. It is usually mentioned in the area underneath battery. When you will open your phone you will see it.

Steps:

1. Open MTK Engineering Mode.
2. Click MTK setting.
3. From connectivity tab choose CDS information, radio information, phone1 or phone2, send AT command AT+EGMR=1,7,”your15digitsIMEI”.
4. Click send AT command button.
5. Restart your phone and it should work now.

If still unclear see my article here.

# Answer
> 0 votes
1) I installed the following android verion http://www.needrom.com/download/lenovo-s860/, but it upgrades to a chinese Vibe 2.0, which is very customised and has no Google Play Store, as weall as all other Google apps.

2) So I used the "Upgrade Firmware" option on the PC program (SP Flash Tool) instead of the "Download" one to install http://www.needrom.com/download/rom-stock-4-4/ (this site contains very precise instructions, check it out before doing any of the steps)

3) Now phone works perfectly, but it has IMEI connection problems - IMEI Invalid - Lenovo S860, rooted android 4.4.2, nothing works

4) KingoROOT seems to fix the IMEI problem

5) Phone up and running perfectly

---
Tags: 4.4-kitkat, root-access, lenovo, imei
---


# Question
Title: Fingerprint lost phone unlocking ability – where to troubleshoot?
Recently, fingerprint sensor on my Note8 lost phone unlocking ability. How can I troubleshoot this?

Once the phone is unlocked, it still works normally: it...

* identifies already registered fingers (in fingerprint setup section)
* unlocks Samsung Pass
* pulls down and retracts the status bar (this works even in locked mode)

So far I...

* uninstalled all apps which were installed last week
* de-registered all fingerprints (what in turn disabled unlocking via reader) and registered them again
* checked the list of assistance apps, but all items are currently switched off
    + there were numerous device restarts during all these experiments – still no success

What else can I try?

# Answer
The problem was that in Knox Workspace, fingerprint reader got disabled by an event similar to a device security policy change which are issued by Knox Workspace administrator. This in turn disabled fingerprint unlock for the entire phone.

The solution was to detach Knox Workspace unlock procedure from phone unlock procedure by switching off the setting **Settings** \> **Work Profile** \> **Use one Lock** and by removal and re-adding fingerprints. Then the reader became available again for unlocking the phone although it is no more available for unlocking Knox Workspace.
> 1 votes

---
Tags: lock-screens, 9.0-pie, fingerprint, samsung-galaxy-note-8
---


# Question
Title: What is nobody@localhost in Google calendar app
I seen something strange option in my Google calendar app in my realme mobile.

There is account with name "NOBODY@LOCALHOST" and with the check box option "nobody@localhost"

I didn't seen before in my past mobile

Any solution appreciated?

# Answer
> 1 votes
This mostly appears in Oppo/Realme phones or maybe all phones from China.

Anyway,to remove it,install on your phone iCal from Google Play Store. Open the app, use it to look at the calendars on your phones, choose nobody@localhost and delete it using iCal. Job done.

Hope this helped.

# Answer
> 0 votes
I couldn't find iCal in the play store, but you can also use CalendarSync trial to remove the nobody@localhost calendar from your device.

---
Tags: android-versions, google-calendar, android-x86
---


title: How do I restore my storage space?

text:
# Question
Title: How do I restore my storage space?
After download a big app,I it says that there is insufficient space; and it stopped downloading. After this i checked application manager and it said that I had low space despite the app not downloading what do I do?

# Answer
> 2 votes
That's a very loose question. If your phone comes with an inbuilt File Manager, use that to navigate to the location and delete and residual files.

You could also use third party applications such as Clean Master to detect and remove unwanted files.

# Answer
> 0 votes
Try deleting the cache in Settings -\> Storage. It probably holds the downloaded part and it could be already large from earlier as it contains other apps caches.

# Answer
> -1 votes
Try uninstalling high mb apps that you don't need anymore,also try using SD Maid to remove useless files.

---
Tags: applications
---


# Question
Title: How to replace SD card formatted as internal storage?
I need help..

I have a redmi 4a device, with android 7, I formatted a 64 gb ADATA SD card as internal storage, worked great for long, until after a restart the SD card is corrupted with precious data on it..

It says tap to format, but it doesn't format, I tried on my laptop and windows cd and Easeus partition manager, but none worked..

I lost hope to fix the SD card, but the phone isn't accepting to show photos or store any data, even with new card identical to the old is mounted.. it says unmount usb storage.. When I try to see a photo status on whatsapp, says can't download because no internal storage is available, please unmount it as a disk drive, and try again.. Also I can't see any picture sent to me in chat..

I tried to format the new card as internal, but same problem..

Any help?

# Answer
> 1 votes
In general fixing an sd-card with corrupt data should be done on raw disk not on partition level, overwriting potential corrupt partition data.

Assuming that the sd-card is physically fully working the best way to reset it is by overwriting the first blocks with zeros.

Unfortunately I don't know a good erase tool that works on Windows and that works on RAW disk level. On Linux this can be easily done using `dd` writing to the block device of the sdcard (e.g. sdb, sdc or something like this).

For Windows the Hex editor HxD may be an alternative if you know what you are doing. It allows to open the full disk in read-write mode and then you can overwrite the first few kilobytes. Just make sure you are writing to the correct disk (and not overwriting e.g. your main HDD/SSD).

Once you have managed to reset the sd-card eject it and then re-insert it. Then format it on the PC and apply then test it using the tool H2Testw. It fills the sd-card with dummy data and then verifies if the all the written data can be read.

---
Tags: internal-storage
---


title: What does TWRP "Fix Contexts" do?

text:
# Question
Title: What does TWRP "Fix Contexts" do?
In my blu\_spark TWRP, I have an option (under "Advanced") named 'Fix Contexts'.

When I press it, it says:

> Note: Fixing contexts is rarely needed
>
> Fixing SELinux Contexts may cause your device to not boot properly.

What does this option do, and when would I want to use it?

# Answer
SELinux is a security mechanism which stops unauthorized access of processes to other processes, actions and filesystems (UNIX's "file" includes all regular files, directories, block devices, character devices, sockets etc.). Every process, file, directory and action is labeled with an SELinux context, then a policy is defined what a context can do to other context. Policy is loaded by kernel or `init` on every boot, and anything not defined in policy is denied by kernel. For more details see this answer.

Filesystem contexts are also generated along with policy. On Android both `sepolicy` and `file_contexts` are saved in rootfs `/` or `/{system,vendor,odm}/etc/selinux/` directories. Filesystem contexts can be manually changed using `chcon` or from `file_contexts` using `restorecon`. Process can be run with a given context using `runcon`. `init` also starts all processes with a predefined `seclabel` in `*.rc` files. Some filesystem contexts are also set on every boot by using `restorecon` command in `*.rc` files.

**Fix Contexts** in TWRP fixes filesystem context labels from a saved `/file_contexts` file. But if this file is for different device or contains wrong or outdated or incomplete contexts, device may get into bootloop. Better avoid using "Fix Contexts", instead use `chcon` or `restorecon` manually if necessary. Or replace `file_contexts` in recovery `ramdisk` with an updated file from your current ROM.

---

**EXAMPLE:**

I have around 40000 policy rules on my device, one is:

```
~# sesearch --allow -s init -t system_data_file -c dir /sys/fs/selinux/policy
Found 1 semantic av rules:
   allow init system_data_file : dir { search read open ioctl write create getattr setattr relabelfrom relabelto mounton add_name remove_name rmdir } ;

```

Out of 2000+ filesystem contexts, one is:

```
~# grep system_data_file /system/etc/selinux/*contexts
/data(/.*)?    u:object_r:system_data_file:s0

```

SELinux context of `init` process:

```
~# ps -p 1 -o pid,cmd,label
  PID     CMD             LABEL
    1     /init           u:r:init:s0

```

SELinux context of directory containing system settings:

```
~# ls -dZ /data/system
u:object_r:system_data_file:s0   /data/system

```

So if `/data/system` is labeled with wrong context, `init` won't be able to perform `search`, `read` and `open` operations on the the directory and the device may bootloop.

---

**DAC vs MAC**:

SELinux is an implementation of Mandatory Access Control (MAC). Discretionary Access Control (DAC) achieves the same goal in less aggressive way by assigning UIDs/GIDs to processes and files:

```
~# ls -ld /data /data/system
drwxrwx--x   41 system   system        4096 Oct 21 17:40 /data
drwxrwxr-x   21 system   system        3488 Nov  9 13:36 /data/system

```

Permission mode and ownership explains that only processes running with UID or GID `1000` (`system`) will be able to read and write to the directory and normal apps (with UIDs/GIDs in range `10000` to `19999`) are not allowed to read system settings.

A drawback of DAC is that it's allowed by default and has a ***Super User*** (root user with UID `0` is allowed to do anything). While MAC is denied by default and there is no ***Super Context***, so it's less prone to exploits. Root user's authorities are also divided in capabilities to follow the principle of least privileges. Combined together, both DAC and MAC provide a more robust isolation, protection and sandboxing.
> 8 votes

---
Tags: twrp, selinux
---


# Question
Title: What does the "Volume Level" in Spotify do?
What does the "Volume Level" option in the Spotify settings do?

I don't notice anything when changing it. A coarse volume level like this also seems redundant to the system-wide volume level.

# Answer
I haven't used Spotify for a long while but from memory the volume setting affects the *next* song, not the current song.And you would need to disable *Normalize Volume* logically speaking.

This reddit says the same with more description

> .... changing the volume level in setting will affect the next song you will listen to but not the one you are currently listening to
> 1 votes

---
Tags: volume-control, spotify
---


# Question
Title: Is there a way to see call log with duration?
I need to log how long I spend on the phone. In Lollipop, this seems impossible:

* First, the dialer only shows the start time.
* Second, if I make multiple calls to one number, the logs become inaccessible as they're grouped, and entering the contact record only shows the most recent history.

Is there a way to see the actual logs?

# Answer
> 11 votes
From the phone app, tap the Action Overflow button (...) in the top-right corner, then tap Call History. Tap any entry, then Details, and it will show you the date, time, and LENGTH of call, or calls (individually, in a list) if multiple were grouped together.

# Answer
> 1 votes
To my knowledge, there is not (and never has been) a native way to achieve this. However, that doesn't mean it's not possible: for most of the details, it's just the frontend that's missing (data is available in the resp. "data providers"). But to investigate the data, you would need a 3rd party app.

There's a manually curated list of hand-picked apps available on my Android website you could chose from: Statistics for calls, messages, data. Depending on what features you favour (how much details you need, how fancy it should look, etc.), different pieces of it might suit you.

If you prefer to get a few choices introduced closer, head over to SoftwareRecs (the link goes to their rules: SR is quite strict for what questions – or answers – must contain to not be "dropped").

# Answer
> 1 votes
Here is the solution (but needs root in some cases). It wasn't showing for me too even after updating the Contacts app. And then I found that the Contacts app on my relative's phone shows:

>

I realize that she had an old version. Even if I deleted all the updates, it is still older than mine (by the way, both run on Pie Android One phone). She sent me the APK of Contacts but I couldn't install it because it older version. So, I opened Titanium Backup, pressed and hold on Contacts, turned it into a user app, uninstalled it, installed the version that she sent to me, and then make it a system app again with Titanium Backup (or any alternative app that transforms a system app into a user app), and it worked really well.

Anyway, the version that shows the time of the call is 3.0.7.210756853. So you should uninstall the updates of the app (from app info, then the top-right corner, and uninstall updates). Then, if you have a version older than 3.0.7.210756853, you don't need root or Titanium Backup or that kind of stuff. All you have to do is to download this version and install it. But if you uninstalled the updates and it is still newer than 3.0.7.210756853, you should have root and do what I explained above.

# Answer
> 1 votes
In the 'Recent Calls' list or 'Recents', touch the name of the person/business. NOT the picture or letter icon/initial, which will open the contact - or the phone icon, which will call them again.

If you touch the Name itself, it should drop down another menu with "Video call", "Message" AND "History". Touch History and you'll have a list of calls made WITH Duration.

---
Tags: calls, call-history
---


# Question
Title: Is there a reason to install, say, VLC from F-droid instead of play store?
I'm a fan/contributor/user of FOSS, but not an RMS-style purist. Is there some advantage I'd get installing OSMAnd or VLC, etc. from there instead of the playstore? Some privacy thing or frequent updates?

I'm basically worried that I'd be hurting VLC's exposure by not adding to their download numbers in the playstore with no real advantage for me or VLC or FOSS in general. I'm explicitly asking if I know an app is FOSS and ensure the author's the right one, why not download from the playstore?

# Answer
Given the second para of your question, where you are sure of developer, I would go with downloading from Play Store -:

* Faster updates. Updates from F-Droid are typically slower than Play Store, more noticeable if developer updates app very frequently. For instance, check out open source email app "FairEmail" and see the versions on Play Store and F-Droid. Admittedly, this is an extreme example because developer at times pushed out 3 updates per day!
* If it is a paid app, it is easier to use Play Store while installing on a new device.
* Not sure of this but I have noticed that non Play Store apps are at times not backed up by Google and restored on new devices. Backing up and restoring has too many factors, so wouldn't weigh this heavily.
> 2 votes

---
Tags: f-droid
---


# Question
Title: Arc Welder app: Launch App, Test, and Download Zip buttons missing
My Arc Welder app has been broken for some time now I can't find any other questions on how to fix this so I thought I would ask myself. my arc welder is missing the "Launch App", "Download Zip", and "test" buttons. it has been broken for some time now. it has worked in the past but I don't know exactly when it stopped working. I don't believe that it became broken from an update to the app because I've seen other people that have it working and I haven't done anything to anything that I could think of related to the app except I have tried a lot of flags in "Chrome://flags" but because none of those have worked I have restored to default and its still broken.

# Answer
I had the same problem. Searched the net and landed in this page. No solution.

I started fiddling around. Tried hitting the TAB button. Success. As the focus moves from the last visible box, the buttons appear.

Have fun.
> 0 votes

---
Tags: applications
---


# Question
Title: sluggish performance due to mmcqd CPU usage
I have an older Droid Incredible running Cyanogenmod 7.2. Recently, I've noticed some sluggishness on the phone that doesn't seem limited to a single app. The CPU Usage Plus app (which I think just runs `top`) often reports that the `mmcqd\2` process is using up a lot of CPU (sometimes 50-60%). Googling around, it seems that this process is somehow related to SD card access.

Is there any way for me to diagnose in more detail what exactly is causing this process to use so much CPU, e.g., by seeing what other process is accessing the SD card? Could re-formatting the SD card help? Or could CPU Usage Plus be leading me astray? I have some apps installed on the SD card, and I could try moving them all back to the phone, but it would be nice to figure out a more detailed diagnosis before trying random solutions.

# Answer
Yes, when you see `mmcqd` on the top-3 processes most of the time you can assure there is a bottleneck created on any storage/flash. You can check that fact easily at the developer options in Android (how to get it), by enabling view CPU usage, the blue color represents I/O operations (more info).

My scenario was more general than the one of the original question: the tablet was already cleared factory-reset, no new apps at-all except chrome and netflix, even re-flashed the stock image but it still was desperately laggy (FYI - Nexus 7 model 2012 with 5.1.1). This is specially true when connected to WiFi or CellData, so before proceeding it's better to enable `plane mode` for a faster operation.

I found the following fixes to be sufficient:

1. \[optional but recommended\] **IF** you are root **OR** have custom recovery (any), you can manually `trim` the storage for a boost of performance (how to). This is specially true since the last time it was used years ago apparently worked well but apps or reflash might have filled space without a chance to trim (more info).
2. \[optional but recommended\] The newer versions of the Google Play store include more services and functions (even API and sync), which I found specially heavy for those older flash storage. Uninstall unused new Google Play items (such as music, books, news, films) and then go ahead to the sync menu and disable most of the items (how to). You will surely find there an item in error, but anyway it's better to clear most of them. **All these are background I/O** (instead of foreground I/O) lagging your device as soon as you connect to network (WiFi/cell).
3. \[optional but recommended\] On the above mentioned developer options menu, scroll down at the bottom to find `limit background process` and select `no process` for a radical approach. That will eliminate background apps I/O adding up.

These general actions totally solved the I/O issue of the old Android (constant mmcqd). However obviously it is not perfect and there **might** still be other **additional** problems, because still modern apps take a small lag to react (for CPU and disk read), and first-boot-up of the system needs some patience (all this is expected). Newer apps and google services do expect newer devices speed.
> 2 votes

# Answer
So I seem to have addressed this issue, but basically by trial and error. I tried formatting the SD card, but that didn't fix the problem. Finally, I gave up and re-flashed the phone with a full wipe, and then re-installed my apps one by one. Eventually, I found that the Amazon Appstore app was a cause of the problem. Without Amazon Appstore, my phone is much snappier, and I haven't seen mmcqd popping up in CPU usage. (I haven't re-installed every single app I had before, so there could have been other troublemakers.) So, problem fixed for now, but I would hope there is a better way to figure out these types of issues.
> 1 votes

# Answer
One way of diagnosing the offending CPU hog application is to open your application manager while your CPU Usage bars are overlayed. One by one open each potential suspect (Start with your list of downloaded apps from the app store) and select 'Force Stop' while watching the CPU usage bar. If you get a significant drop then you have found the (or one of the) problems. Remove that app. Note that i could be an app that you have had installed for a long time and so you 'trust' it, however a recent update may have changed its usage profile (sending constant checks/polling/whatever to check for status/notifications/updates/etc from whatever site the app is associated with is a typical app abuse symptom.
> 0 votes

---
Tags: cyanogenmod, sd-card, htc-droid-incredible, performance
---


# Question
Title: Why bowsers cannot download files to storage (path looks /dev/null/Download)?
The phone is Samsung Galaxy Note N7000. For the last few years I use NightOwl custom rom (Android 7). I do not remember when I faced with this problem, maybe after repartitioning with REPIT (but author says that probably not), but now I cannot make photos - photo app says that I need to insert SD card, but I can make photos through the Evernote app. Also in WhatsUp I cannot see photos because my phone cannot download them, and web browsers cannot download any file. But I can install most of the programs, and for example Evernote cache my notes.

Inside recovery mode, in TWRP, I found that I have partition `sdcard1` that is 0 bytes in size. Maybe if I remove this partition it will fix my storage problem?

I tried to flash the same ROM again. I asked in thread about this ROM, but nobody answered. The phone is without external SD card. When in `Settings` I open `Storage` \- it crash.

`logcat -b all | grep -iE 'vold|storage'`: log.

`/proc/last_kmsg` and `dmesg`: log.

`mount` returned:

```
rootfs on / type rootfs (ro,seclabel,relatime)
tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,mode=755)
devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,seclabel,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt type tmpfs (rw,seclabel,relatime,mode=755,gid=1000)
none on /dev/memcg type cgroup (rw,relatime,memory)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
/dev/block/mmcblk0p9 on /system type ext4 (ro,seclabel,noatime,user_xattr,barrier=1,data=ordered)
/dev/block/mmcblk0p7 on /cache type ext4 (rw,seclabel,nosuid,nodev,noatime,errors=panic,user_xattr,barrier=1,journal_async_commit,data=ordered)
/dev/block/mmcblk0p1 on /efs type ext4 (rw,seclabel,nosuid,nodev,noatime,user_xattr,barrier=1,journal_async_commit,data=ordered)
/dev/block/mmcblk0p10 on /data type ext4 (rw,seclabel,nosuid,nodev,noatime,errors=panic,user_xattr,barrier=1,journal_async_commit,data=ordered,noauto_da_alloc)
tmpfs on /storage type tmpfs (rw,seclabel,relatime,mode=755,gid=1000)
/sys/kernel/debug on /sys/kernel/debug type debugfs (rw,seclabel,relatime)
/dev/block/vold/public:179_11 on /mnt/media_rw/S}M-^^M-~4M-9^DK $t type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/block/vold/public:179_11 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/fuse on /mnt/runtime/default/S}M-^^M-~4M-9^DK $t type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /storage/S}M-^^M-~4M-9^DK $t type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /mnt/runtime/read/S}M-^^M-~4M-9^DK $t type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
/dev/fuse on /mnt/runtime/write/S}M-^^M-~4M-9^DK $t type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)

```

`blkid`:

```
/dev/block/zram0: UUID="da191bea-c7ca-4b27-af09-ce87c7f99943" TYPE="swap"
/dev/block/mmcblk0p1: UUID="57f8f4bc-abf4-0000-675f-946fc0f9f25b" TYPE="ext4"
/dev/block/mmcblk0p7: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/mmcblk0p9: LABEL="system" UUID="da594c53-9beb-f85c-85c5-cedf76546f7a" TYPE="ext4"
/dev/block/mmcblk0p10: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/mmcblk0p11: LABEL="S}M-^^M-~4M-9^DK $t" UUID="7F73-0B1A" TYPE="vfat"
/dev/block/mmcblk0p12: UUID="49f005e2-2f62-448b-9ba1-3e4da2ee1b41" TYPE="ext4"

```

`# cat fstab.smdk4210`:

```
# Android fstab file.
#<src>                                      <mnt_point>             <type>    <mnt_flags and options>                                   <fs_mgr_flags>
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
# data partition must be located at the bottom for supporting device encryption

/dev/block/mmcblk0p9                        /system                 ext4      ro,noatime                                                wait
/dev/block/mmcblk0p7                        /cache                  ext4      noatime,nosuid,nodev,journal_async_commit,errors=panic    wait,check,formattable
/dev/block/mmcblk0p7                        /cache                  f2fs      noatime,nosuid,nodev,inline_data,inline_xattr,discard     wait,check,formattable
/dev/block/mmcblk0p1                        /efs                    ext4      noatime,nosuid,nodev,journal_async_commit,errors=panic    wait,check,notrim
/dev/block/mmcblk0p10                       /data                   ext4      noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic    wait,check,formattable,encryptable=/efs/metadata
/dev/block/mmcblk0p10                       /data                   f2fs      noatime,nosuid,nodev,inline_data,inline_xattr,discard     wait,check,formattable,encryptable=/efs/metadata
# /dev/block/mmcblk0p12                       /preload                ext4      noatime,nosuid,nodev,journal_async_commit                 wait

# vold-managed volumes ("block device" is actually a sysfs devpath)
/devices/platform/dw_mmc/mmc_host/mmc0/mmc0*     auto    auto    defaults        voldmanaged=sdcard0:11,nonremovable,noemulatedsd
/devices/platform/s3c-sdhci.2/mmc_host/mmc1*     auto    auto    defaults        voldmanaged=sdcard1:auto,encryptable=userdata
/devices/platform/s3c_otghcd/usb*                auto    auto    defaults        voldmanaged=usb:auto

# recovery
/dev/block/mmcblk0p5                        /boot                   emmc      defaults      recoveryonly
/dev/block/mmcblk0p6                        /recovery               emmc      defaults      recoveryonly

# zRAM
/dev/block/zram0

```

# Answer
> Inside recovery mode, in TWRP, I found that I have partition `sdcard1` that is 0 bytes in size. Maybe if I remove this partition it will fix my storage problem?

In TWRP there's also USB OTG which would also be 0 bytes in size. Both are just mount points where external SD card and USB OTG are mounted (if available). This isn't relevant to your problem, neither you can remove this partition (because it's not a partition).

The root cause of problem seems to be the bad filesystem label you set on `mmcblk0p11` partition. `vold` includes filesystem label (or UUID or serial number) in mount path, which the processes are unable to read.

`blkid`:

```
dev/block/mmcblk0p11: LABEL="S}M-^^M-~4M-9^DK $t" UUID="7F73-0B1A" TYPE="vfat"

```

`mount`:

```
/dev/block/vold/public:179_11 on /mnt/media_rw/S}M-^^M-~4M-9^DK $t type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/fuse on /storage/S}M-^^M-~4M-9^DK $t type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)

```

`vold`:

```
11-06 02:25:53.173  2901  2968 D VoldConnector: RCV <- {654 public:179_11 S}M-^^M-~4M-9^DK $t}
11-06 02:25:53.173  2901  2968 D VoldConnector: RCV <- {656 public:179_11 /mnt/media_rw/S}M-^^M-~4M-9^DK $t}
11-06 02:25:53.174  2901  2968 D VoldConnector: RCV <- {655 public:179_11 /storage/S}M-^^M-~4M-9^DK $t}

```

Characters in string: `S}M-^^M-~4M-9^DK $t}` seem to be non-printable. E.g. `^M` denotes *Carriage Return* which is used with *Line Feed* to print new line character (next line) on Windows (`CR LF`).

You can fix the filesystem label using `fatlabel` from dosfstools or `mlabel` from mtools. Boot in recovery, un-mount all partitions and do:

```
~# fatlabel -r /dev/block/mmcblk0p11

```

Or set label manually:

```
~# fatlabel /dev/block/mmcblk0p11 sdcard

```

Or you can format the partition, but it's not clear from your provided information what filesystem it is. I suppose it's FAT32. So either go to *Advanced Wipe* --\> *Repair or Change Filesystem*, select the partition, select FAT32 (if supported by TWRP) and format. Or from commandline do:

```
~# mkfs.fat -F32 /dev/block/mmcblk0p11

```

Or with label:

```
~# mkfs.fat -n sdcard -F32 /dev/block/mmcblk0p11

```

Use `-F16` option or `mkfs.vfat` for FAT16 or vFAT filesystems. Generally all use `vfat` driver.

In all cases make sure to select right partition otherwise **YOU MAY GET YOUR DEVICE PERMANENTLY BRICKED**.

Or flash factory firmware if available. Note that all data will be erased.
> 1 votes

---
Tags: internal-storage, file-system, storage, partitions, internal-sd
---


# Question
Title: Set/Get value of variables in '/proc/sys/net' using terminal
consider these values which are stored in their respected files in this path: /proc/sys/net

```
/core/rmem_default 32768
/core/rmem_max 65536
/core/wmem_default 32768
/core/wmem_max 65536
/core/somaxconn 1024
/core/netdev_max_backlog 3000
/ipv4/tcp_rmem "4096 32768 65536"
/ipv4/tcp_wmem "4096 32768 65536"
/ipv4/tcp_low_latency 1
/ipv4/tcp_slow_start_after_idle 0
/ipv4/tcp_timestamps 1
/ipv4/tcp_tw_recycle 1
/ipv4/tcp_tw_reuse 1
/ipv4/tcp_window_scaling 1

```

How can we get and set above values using terminal?

# Answer
> 1 votes
You can get the values easily but can't set them without root access because the files are read-only (`rw-r-r`) for "others".

## Get the values

1. Use D. Gibbs's answer to setup ADB.
2. Launch Terminal/cmd in PC and enter:

```
adb shell
find /proc/sys/net/ -type f | while read -r file; do echo $file $(cat $file); done

```

* `find` will find the files under the location `/proc/sys/net/`. Tweak the location if the need arises.
    * `while read` will read each line of the previous output as a file,
    * `do` will allow execution of tasks (`echo` "filename" and show its value using `cat`),
    * `done` to complete the task.
    * Sources: , .

Snippet of output:

```
/proc/sys/net/core/dev_weight 64
/proc/sys/net/core/message_burst 10
/proc/sys/net/core/message_cost 5
/proc/sys/net/core/netdev_budget 300
/proc/sys/net/core/netdev_max_backlog 1000
/proc/sys/net/core/netdev_tstamp_prequeue 1

```
3. You may save the output into a file by using `> <FILENAME>` at the end of the step 2's last command.
4. Some files won't be saved or shown because of file permissions. In that case, root the device and repeat the aforesaid steps using `su` after adb `shell` command.

## Set the values

Now that you've a table of file -\> value, you can change the value using `echo`, provided that you've root access.

1. In the terminal, enter:

```
adb shell
su
echo <VALUE> > <FILE_PATH>

```

Change `<VALUE>` with the value you want to set and `<FILEPATH>` with the path of the file. E.g.

```
echo 46 > proc/sys/net/core/dev_weight

```

---

You can apply the steps in a terminal app on Android as well. Just make minor changes relevant to the environment, like `> <FILENAME>` in find command, and not using `adb shell`.

# Answer
> 0 votes
You can use ADB(Android Debugging Bridge) to access these files on the device. There are two things you need to do to get ADB working:

1. Install ADB: You can find many tutorials of installing ADB for Windows from Google or use the provided link.
2. You must enable ADB debugging on your device then start a command prompt on Windows to access the shell.

After you open a command prompt (Windows: Click start-\> type in `cmd` in the search bar, then click on Command prompt) type in `adb shell` to start the Android shell. After than, simply navigate to the directory of your choosing `cd /proc/sys/net`.

# Answer
> 0 votes
`sysctl` is a standard Linux tool to set/get kernel configuration in `/proc/sys/`, available on Android as `toybox` applet. Or you may use busybox applet.

```
~$ /system/bin/sysctl --help
usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]

Read/write system control data (under /proc/sys).

-a,A    Show all values
-e      Don't warn about unknown keys
-N      Don't print key values
-n      Don't print key names
-p      Read values from FILE (default /etc/sysctl.conf)
-q      Don't show value after write
-w      Only write values (object to reading)

```

Use a terminal emulator app or `adb shell`:

```
~# sysctl net.ipv4.tcp_timestamps=1
~$ sysctl net.ipv4.tcp_timestamps
1

```

Setting values is only allowed to root.

---

**RELATED:**

---
Tags: terminal
---


title: Disable vibration in Samsung?

text:
# Question
Title: Disable vibration in Samsung?
(Attention: Samsung's 9.0-Pie / One UI is different from stock Android)

Is there any way to **completely** disable vibration in a Samsung phone running their flavor of Android Pie (9.0)?

I already have `Settings / Sound and vibration / Vibrate while ringing` tuned `OFF`, but the phone still vibrates for various notifications.

The problem is that vibration makes this phone slide off whatever hard surface it's on.

# Answer
Go to Settings -\> Accessibility -\> Vibration and switch it off
> 1 votes

---
Tags: samsung, notifications, 9.0-pie, vibration
---


# Question
Title: TWRP ask for password - cant mount data partition
I want to install an open ROM like AospExtended on a new Xiaomi Redmi Note 5 with stock MUI. To avoid issues with Xiaomi's anti rollback mechanism, I'd like to boot TWRP then copy its image and install it permanently as described in many posts like here.

But TWRP can't mount my data partition, it asks me for a password. I had none set. Regarding to this post I tried setting a password for the lockscreen. Altough he has the same problem with an older version of android, it doesn't accept the password.

Some threads like this recommend OrangeFox instead of TWRP. But the 9.0-1 shows the same behavior:

With 9.0.2 of OrangeFox it doesn't ask for password any more, so this seems to work. But why isn't it working with TWRP? This post said it's fixed in `3.2.3_1`. Since I booted 3.3.1-0 like this:

```
> .\fastboot.exe boot D:\Downloads\twrp-3.3.1-0-whyred.img

```

This fix should be included. As a workaround, I'll try OrangeBox (especially in regard to OTA updates, havent tried OrangeBox before). But I'd like to know why those problem exist with TWRP and how could it be fixed?

I've used TWRP over the time with different devices and it always worked well (also with OTA updates).

# Answer
> 1 votes
i have experienced this with two other Xiaomi devices. first i could track it down to older unofficial variant of twrp 3.2.3 which is still decrypting with default password when official twrp 3.3.1 fails. so implementation of decrypting differs from each build, sometimes it is just a missing line in fstab, sometimes they forgot a flag during build.
But this is not the full explanation. Recently working twrp started to fail after MIUI OTA update. This means the encryption depends on ROM (system or vendor) therefore these partitions need to be mounted for decryption (which twrp normally does automatically).
encryption security may have changed/improved with new android version and twrp has not implemented that in your build. I have also seen twrp variant which does successfully decrypt userdata but does not mount /data because of a wired parameter related to disk quota. Flashing a disk quota disabler may help in this case. basically its a try and error to find a recovery which is working - which you have found.
Your question is therefore ot and should be discussed on github or developer boards

---
Tags: rom-flashing, custom-roms, twrp, fastboot, xiaomi
---


# Question
Title: What folder are Google Podcasts downloads stored in?
I want to pull some podcast downloads off my phone, and put them on my computer.

I have plugged my phone into my computer's USB port. What folder can I find my Google Podcast downloads in? My computer is showing a *lot* of folders with cryptic names :-(.

I am looking in my computer's file manager, "Nokia 6.1" -\> "Internal shared storage". I do not have an SD card in my phone.

---

My computer runs GNOME. I have connected to the phone using USB (MTP) before, and it worked great. That was for some different files though :-).

Phone version:

* Device name: Nokia 6.1
* Model & Hardware: TA-1050
* Android version: 9
* Security patch level: 1 October 2019
* Kernel version: 4.4.153-perf+
* Build number: 00WW\_3\_54H\_SP03

I bought the phone as new, and I have not rooted it.

# Answer
`data/user/0/com.google.android.googlequicksearchbox/filesvelour/feature_data/wernicke_player/downloaded_episodes`

---

Found using the Disk Space Analyzer on my GNOME computer :-).

This is the *only* folder that appears in `data/user/0/`.

Apparently, there are a lot of other folders that might look similar, but would not be accessible by other non-system Android apps, and would not be expected to be accessible through USB either. But my Android is quite happy for me to access this specific folder through USB.

I have enabled "Developer options", but I have not used it to change anything AFAIR. If I disabling "Developer options", I can still plug my phone in and access the above folder using USB.
> 1 votes

---
Tags: usb, google, podcast
---


# Question
Title: Can't move or share files in My Files app
just downloaded some mp3 files and needed to move them from downloads to my music folder. not sure if its because of the new system update, but for some reason there is literally no option to move, copy, share - nothing. just move to secure folder. i tried that but all you can do is move the files out of the folder once theyre in so that was worthless. i can select them or select them to edit or select them to share. no options come up except 'move to secure folder' or 'compress'.

# Answer
went to app settings and cleared the cache for my files app. when i went back to the app i was able to see all of the file options (move, copy, delete, etc) again.
> 1 votes

---
Tags: samsung, default-applications, samsung-galaxy-note-9, application-error, my-files
---


# Question
Title: How to stop apps writing to "Android" folder on the SD card?
I have a (seemingly) simple question to which I haven't found a clear answer to. My phone creates an "Android" folder on my SD card and I'm wondering if it could be moved into the phone's internal storage instead.

I just got a new phone and it's got way more storage than my last phone, so I'd like to make the most out of it as I can, so I'd prefer that all the application data is on the internal storage rather than on the SD card.

That's the way it worked on my old phone, so I'm a bit puzzled that it doesn't seem as easy to do anymore.

# Answer
Apps usually don't write data to external SD card, but starting with Android 4.4 up to latest release 10, there is no permission to stop apps writing to `Android` directory on external storage. The reason is more historical than technical.

---

## ANDROID'S STORAGE JOURNEY:

Android provides two types of storage to apps: **private** (or internal) and **shared** (or external). As names suggest, private directories of every app (in `/data/data/`) aren't accessible to other apps, but data placed on shared storage is.

**External storage** used to be physically external SD card (with permission-less filesystem from FAT family) in early days when flash storage was costly. So apps used to place a lot of data on external SD card.

Android enforced WRITE\_EXTERNAL\_STORAGE permission as early as in Android 1.5 to control which apps could write to external storage, so almost every app had to request this permission.

As the internal flash memory grew in size, OEMs created a separate partition (usually named `sdcard`) ***"to provide external storage internally"***. Now there were two external storage: **primary** (`sdcard` partition) and **secondary** (external SD card). Since primary external storage was still smaller, apps continued to widely use secondary storage by placing files wherever they wanted, creating random directories on both storage.

In Android 2.3 FUSE was introduced to emulate primary external storage (`/sdcard`) over actual filesystem of `sdcard` partition which majorly remained vFAT. But the primary intention was to retain a permission-less virtual filesystem (like FAT) over a permission-aware Linux filesystem (like `ext4`) so that data could be shared among apps (UIDs).

Android 3.1 switched USB Mass Storage (UMS) to Media Transfer Protocol (MTP). It means that `sdcard` partition or external SD card was not mounted as partition when connected to PC. So actual filesystem contents aren't visible over MTP, instead MediaStore (one of Android's built-in content providers) provides an indexed list of files. Also apps can make use of this content provider. See details in this answer.

Starting with Android 3.2 apps write-ability to external SD card was restricted to only system apps (using `WRITE_MEDIA_STORAGE` permission). See details in How to move files to external SD card?. On rooted devices this restriction is hacked by mapping GID `media_rw (1023)` to WRITE\_EXTERNAL\_SRORAGE permission.

By the release of Android 4.0 (started with 3.0) OEMs started emulating `/data/media` on `/sdcard` as **primary external storage**, which eliminated `sdcard` partition. This was not possibly with UMS because `/data` could not be un-mounted from Android to mount on PC. This is true to till date.

Android 4.3 merged multiple `fstab`s used previously to a single `/fstab.<device>` file and introduced `voldmanaged` flag for external filesystems to be mounted by `vold`. With Treble support in Android 8, `fstab` was moved to `vendor` partition and in DTB. See What is default “fstab” file in Android?

In Android 4.4 making use of FUSE-based synthesized permissions, apps were allowed to write to their ***"private directories"*** (inside `Android/{data,media,obb}/` directories) ***on "shared storage"*** without requesting Storage permission. It made it officially possible for apps to use **multiple external storage** (primary and secondary). Also `READ|WRITE_EXTERNAL_STORAGE` was necessarily required to read external storage, including other apps' private directories.

Storage Access Framework (SAF) was introduced to let non-system apps write to SD card and direct write access to secondary external storage was strictly stopped. So now it was made clear that **external storage** is not always **removable storage**, the former could be physically internal. **Transient storage** like USB is in addition to these.

---

**Coming to your question:**

> I'd prefer that all the application data is on the internal storage rather than on the SD card.

Third party apps cannot write directly to public directories on secondary external storage, but cannot be stopped from writing to their private directories (, , , ), thanks to synthesized permissions based on directory structure:

> *"The `WRITE_EXTERNAL_STORAGE` permission must only grant write access to the primary external storage on a device. Apps must not be allowed to write to secondary external storage devices, except in their package-specific directories as allowed by synthesized permissions. Restricting writes in this way ensures the system can clean up files when applications are uninstalled."*

And:

> *"Starting in Android 4.4, the owner, group and modes of files on external storage devices are now synthesized based on directory structure. This enables apps to manage their package-specific directories on external storage without requiring they hold the broad `WRITE_EXTERNAL_STORAGE` permission. For example, the app with package name `com.example.foo` can now freely access `Android/data/com.example.foo/` on external storage devices with no permissions. These synthesized permissions are accomplished by wrapping raw storage devices in a FUSE daemon."*

By accessing / creating their private directories, apps confirm if the secondary external storage is available. So in most cases the directories under `Android` directory on SD card are either empty, or the files are a copy of those on primary external storage. Though it doesn't make sense most of the times, but some app developers may prefer to save data on secondary external storage, it's up to their will. E.g. for quickly expanding raw video files or large OBB files as mentioned by Andrew in comment. Android's suggestion:

> *"... the device has two different external storage directories, so you need to select which one to use when writing "private" files to the external storage.
...
The first entry ... is ... the primary external storage, and you should use that location unless it's full or unavailable."*

And the other one:

> *"An application may store data on any or all of the returned devices. For example, an app may choose to store large files on the device with the most available space"*

Since private directories on external as well as internal storage are deleted on app uninstall, the preferred storage for apps to store persistent data (like photos) is primary external public storage. This norm continues to till date. Therefore it's usually safe to delete `Android` and other empty directories (some Android versions also create standard directories) on external SD card but those would be recreated.

---

**STORAGE JOURNEY CONTINUED...**

SAF (file picker) was extended in Android 5 (for Directory Selection) and then in 7 (to Scoped Directory Access). Android 10 further extended it to Scoped External Storage Access entirely removing filesystem level access to primary external storage as well, replacing with filesystem APIs.

Android 6 introduced Adoptable Storage to use SD card as primary external storage by encrypting it (`vold` flag in `fstab`: `encryptable=userdata`). Now even apps and their data on internal storage can be moved to adoptable storage. See How to move apps from internal to external storage? This was previously achieved by OEMs and custom ROM developers by applying patches like *"Default write disk"* or *"Disable Internal Memory"* to AOSP. Apps like *"Link2SD"* also filled the gap on rooted devices.

Additionally Storage Configuration (`storage.xml`) was removed from `framework-res.apk` and merged to `fstab`. UUID based mount path was introduced.
Also many install-time permissions were shifted to runtime permissions and in order to make `WRITE_EXTERNAL_STORAGE` a runtime permission, mount namespaces were used. For details see What is the “u#\_everybody” UID? and What is /storage/emulated/0/?

FUSE was removed completely in Android 9. `sdcardfs` is now used for emulation. Read full story here.
> 22 votes

---
Tags: internal-storage, external-sd, storage
---


title: No memory avaiable on my Galaxy S4

text:
# Question
Title: No memory avaiable on my Galaxy S4
I don't understand why I can't take photo or video with my Samsung Galaxy S4. I have 32 GB of memory and I haven't a lot of photo or apps in my mobile phone. I tried to delete photo, video or apps that I don't use, and also I have just restart my phone but the situation is the same.

# Answer
Speaking with experiance with a galaxy S4.

> Try deleting the cache, from the storage menu. Goto Storage-\>Internal Storage-\> Delete Cache

Should empty up a lot of space by now, for more storage,

> Goto Storage-\>Internal Storage-\> Explore

Delete files named,

* .thumbnails
* .profigos
* .faces

These are temporary files created, you can delete them, it won't harm any of your data.
> 1 votes

# Answer
I had the same problem and I realized my Dropbox was taking up a lot of space. I had my photos etc already downloaded do I just disabled it and now I have a lot more space. Hope this helps.
> 0 votes

---
Tags: samsung-galaxy-s-4, insufficient-memory
---


# Question
Title: Block all calls from area code unless in Contacts
I need a way to block all calls from an area code, unless the number is in my contact list. Anyone know of a way to do that?

I found plenty of apps that can block by area code, but they'll also block any of my contacts if they have that area code. I could add each of my contacts to a whitelist, but then I have to remember to do that each time I add a contact.

# Answer
> 3 votes
is the preferred option. Many apps are available. I prefer using MacroDroid , since it is free (upto 5 macros) and easy to learn.

---

You would need two macros for this

First macro would be to set a flag when the call is from an area code

**Macro :** Area code (name of macro as example)

**Trigger:**

1. Call incoming → Select number → abc\* ( where abc is numeric area code you are interested in and * is wildcard to represent any number . You need to know / experiment here - in my case I needed to type `+<2digit country code><2 digit state code>< * wild card >` to test with land line telephone
2. You would need another similar trigger for identifying mobile numbers from that area if / as applicable

**Action**: Set Macrodroid Variable → New variable → from area code ( name of flag, it can be anything ) of type *Boolean* to *true*

**Constraints:** Leave blank

In the next macro we reject the call when the twin conditions of calling number is a non contact **and** from that area code are met

**Macro :** Reject call (name of macro as example)

**Trigger:** Call incoming → Select Contact → Non contact

**Action**:

1. Call reject

add constraint to this action by long pressing action

Macrodroid Variable →from area code `=` True (Macro only runs in this case, satisfying twin criteria conditions)

2. Set Macrodroid Variable → from area code to false ( initialisation of flag )

**Constraints:** leave blank

I have only tested with landline available to me and it worked. Logic has been explained and you would need to configure with special attention to area codes of landline / mobile

# Answer
> 3 votes
beeshyams' solution did not work for me, but i was able to modify it and get it working. The issue that i encountered was that the "call incoming" trigger only happens once when you first receive the call. this means if you check for a boolean triggered by the incoming call, it won't be set yet.

first thing i did was find out what format i needed for the phone number by creating a very simple macro:

```
trigger: call incoming -> contacts -> any number
action: logging -> log event -> call number

```

i checked the logs and saw that the number was `+12345678900`. (im in the us)

next i deleted that macro and made the following:

---

```
T: call incoming (+1234*)
A: set variable (areacode: True)

```

---

```
T: call incoming (non contact)
A: set variable (noncon: True)

```

---

we are going to use the variables being set as our trigger to reject the call. these variables seemed to be set in a random/inconsistent order, so i just made two triggers, that way it didn't matter which was set first. this is a very janky solution, but it works.

```
T: macrodroid variable change (areacode = True)
A: call reject, set variable (areacode: False), set variable (noncon: False)
C: macrodroid variable (noncon = True)

```

---

```
T: macrodroid variable change (noncon = True)
A: call reject, set variable (areacode: False), set variable (noncon: False)
C: macrodroid variable (areacode = True)

```

---

finally, we need a way to reset the variables if our call blocking macros haven't been triggered. the best solution i found was to clear them after a call was completed or missed.

```
T: call missed (any number), call ended (any number),
A: call set variable (areacode: False), set variable (noncon: False)

```

---

i'm sure there is probably a more elegant solution, but this is at least working for me. (hooray, no more scam calls at 6am!) luckily there are exactly 5 free macros in the app, and 5 in my solution. if you have multiple area codes you need to block, you can put them all into the one macro with a separate trigger for each i think. (didn't test this)

all of this pain could be solved if you could have a trigger be caused by two conditions being met. that would mean we would only need a single macro, but from what i can tell, this isn't possible. unfortunately the constraints don't let you access the incoming call information so that doesn't work either. maybe there is a better app.

---
Tags: automation, call-screening
---


# Question
Title: How to change random filesystem label on USB OTG?
I am without PC right now, but I need to Format USB Drive (to FAT32 or Ext4) with Samsung S8 (Android 9) and change label. But I can't find any app that can do this. I can format USB drive in Storage Menu, but without any options, it just gives it Random number name (I can see it in Total commander) and I think it's Ext4, but again no options. Is there any option to rename the Label?

I found they there is Aparted app (port of gparted) but it needs ROOT and also it gives random label.

I also tried to rename drive in Total commander, but it says it's ranamed, but in reality it has old label. Thanks for any help :).

# Answer
> 0 votes
It's not possible to create filesystem or set label without root access. Block devices in `/dev/block/` are created with ownership `0:0`, mode `0600`. Also apps aren't allowed to access SELinux context `device` or `block_device` set on `/dev` and `/dev/block`. You can use a rooted device or custom recovery like TWRP. Or use a PC (if available). On Linux and Android command-line is same.

> I need to Format USB Drive (to FAT32 or Ext4)

Use `mkfs.fat -F32 -n <LABEL>` or `mkfs.ext4 -L <LABEL>` to create filesystem with required label. Or later use `fatlabel`/`mlabel` or `e2label`/`tune2fs` to change label of an already created filesystem.

> I can format USB drive in Storage Menu, but without any options, it just gives it Random number name

The random number is not name (or label), it's filesystem UUID (32-digits long string on Linux filesystems like `ext2/3/4`) or Volume ID (8-digits long string on Windows filesystems like `NTFS`/`FAT32`/`exFAT`). Similarly GUID partitions have a PARTUUID and PARTLABEL (as reported by `blkid`).

USB OTG and external SD card is mounted by Volume Daemon (`vold`) on Android. Since Android 6 by default `vold` uses filesystem UUID or VolumeID to create a mount path (which is not an actual path in case of USB OTG) like `/storage/[UUID]`:

> *"Developers may continue to build paths dynamically or statically depending on their use case. Including the UUID in the path identifies each card to make location clearer for developers. (For example, `/storage/ABCD-1234/report.txt` is clearly a different file than `/storage/DCBA-4321/report.txt`.)"*

So even if you set label, whatever filesystem you choose, you will see the random number in path. However, like label, you can also set UUID/VolumeID of your choice (in case you want to retain same file path after formatting). Some file explorers, though, show filesystem label as storage name along with path.

---
Tags: file-system, partitions, usb-on-the-go
---


title: Forward calls to messenger

text:
# Question
Title: Forward calls to messenger
Is it possible to forward network calls on an Android mobile phone through a messenger, like Telegram or Whatsapp, to a set contact?

Could IFTTT be used for this?

# Answer
> 1 votes
Call forwarding is a telephony or carrier function. It works amongst voice networks or some VOIP sites. For it to work with messenger apps:

* They should mutually allow it, which is unlikely given the revenue models of voice calling (at times call forwarding is a paid service even for voice networks) .
* Security concerns - for example, if the calling number cannot be identified across messaging apps, it would not be permitted. There could be more such scenarios.
* Encryption. Voice calls of WhatsApp are encrypted. Same is the case with Telegram. They would not like to expose or let others use their proprietary encryption.

There may be more reasons too. Only after it is legally and financially viable a messaging app will expose an API that can be used for this. Till such time this is possible, automation is ruled out irrespective of the app

---
Tags: whatsapp-messenger, calls, voip, telegram, ifttt
---


# Question
Title: How to undo "Enable autofill for [website]" in Firefox?
My question is similar to \[Undo "Disable autofill for \[app\]" one), but the solution doesn't work for me, so please bear with me.

I'm using Keepass2Android for autofill. It works great in most apps. It also worked in Firefox until one day I pressed *Enable autofill for \[website URL\]*. Now it doesn't work for this website. There's no autofill popup, so I can't undo this like I could in other apps. I've also done this in Firefox Preview and it stopped working altogether for all sites in that browser.

What I've tried:

* Solution from this question \- I don't have the 3 dots button
* Reinstall Keepass2Android - no change
* Reinstall Firefox - no change
* Clear Firefox cache and data - no change

I'm using OnePlus 6T with latest OxygenOS (Android P-based).

# Answer
> 1 votes
External autofill apps change a certain boolean in the Firefox for Android configuration variables, this "setting" can nly set back to the old setting by completely uninstalling and reinstalling Firefox or better by changing it in: about:config

* goto **about:config**
* search for: **dom.forms.autocomplete.formautofill**
* set it back to **true**
* **refresh** your login window and... fixed!

---
Tags: 9.0-pie, firefox-for-android, oxygenos, auto-fill
---