# Question
Title: How to disable, delete, or block MMI Group?
I noticed an MMI program in my files. It will not allow me to delete, block, or disable.

How do I disable, delete or block MMI Group?

# Answer
Leave it alone, is the advice on other forums.

> That's a Samsung specific system app. You can't remove or disable it from the UI. Please consult Samsung for more information about it.

From google.support.

> This is a pre-installed app, idk why someone said the customer support said it didn't, there is a company called MMI group and I think the app is some kind of test or something but it is pretty sketchy but malwarebytes is fine with it

From Another post on this site
> 0 votes

---
Tags: applications, samsung
---


# Question
Title: Duplicating a contact in the Samsung contacts app
How can I duplicate a contact in the phone memory of a Samsung Android 11 smartphone without entering the same information again ? This is helpful for example when adding a person in the same organization as an already existing person in this organization.

ChatGPT told me to use the duplicate option in the options menu when editing the contact but there is no options menu in edit mode and the options menu outside edit mode does not contain a duplicate option.

Samsung Contacts app is version 12.7.05.5.

# Answer
The only way I know is to email it yourself -

* Open Contacts
* Find Contact
* Open the desired Contact
* Select Share
* Select VCF
* Select Email
* Email it to yourself
* Open Email
* Click on attachment
* Agree to View the .vcf file
* Select Contacts to view it
* Select Import
* Select the Account to import it into (Use google account/phone/sim)depending on where you have your contacts assigned to.
* Press Import
> 1 votes

# Answer
Inspired by @RohitGupta's answer, I've found an easier solution without involving eMail:

* Open the desired contact
* Select Share
* Select VCF
* Select any text editor to share with (I've used "Simple generic text editor" from F-Droid)
* Save as `*.vcf` in a shareable phone memory location (maybe Downloads folder)
* Edit and save the existing contact in the Contacts app (needed to prevent from importing into the already existing contact which would prevent from duplicating it)
* Select the just saved `*.vcf` file using any file manager
* Select Contacts to view it
* Select Import
* Select Phone Memory, press OK.
> 1 votes

---
Tags: samsung, contacts
---


# Question
Title: Spotify turns into "Google Assistant" and crashes
This is a weird one - I'm running Magisk rooted Lineage on a Pixel 4a

When I reboot, Spotify is renamed to Google Assistant and I get a popup saying "Google Assistant keeps stopping", and Spotify (Google Assistant with the Spotify logo) won't launch.
Clearing cache and storage doesn't fix it, I have to uninstall and reinstall, and then it'll work perfectly until I reboot.
Just today it stopped renaming but it still gets bricked, so I did some more investigating:

* I un-rooted and the problem stopped happening, then re-rooted and it started again.
* I turned everything off in the Superuser tab of Magisk, and removed all my modules (Except SafetyNet Fix) but it still happens
* The problem started around when I installed ReVanced so I've completely removed everything related (Youtube ReVanced, Youtube, Revanced Manager, and related modules) but no luck
* If I let Spotify get bricked then un-root ("Restore Images" from Magisk, not "Complete Uninstall"), Spotify works fine. So it seems like something is interfering with it, rather than modifying the installation

# Answer
I did a "Complete Uninstall" from Magisk, then re-rooted and it's fixed the issue even after reinstalling everything I had. Maybe it was a virus of some kind ¯\\\_(ツ)\_/¯
If you have any other theories or have a similar experience let me know
> 0 votes

---
Tags: root-access, magisk, google-assistant, spotify
---


title: What is "MMI Group" app?

text:
# Question
Title: What is "MMI Group" app?
On my Samsung Galaxy Tab A, there is an app in the app settings called "MMI Group" and it takes lots of permissions. When researching, lots of users also have this app that takes lots of permissions, so it could be some test to see if all the permissions work or something, but it seems VERY sketchy and you can only force stop, that's it. But when researching, someone else said they contacted support and it was not a preinstalled app which is extremely sketchy. I have scanned my tablet with Malwarebytes though and I don't install sketchy things.

So, when looking, someone found the app on phones in the store, so I think it's just some weird app that gets installed a lot and maybe it's from the Google Play Store or Google, I don't know.

But the point is you can't uninstall or stop the app from using permissions, and it says that the app is needed for the system.

# Answer
> 1 votes
According to Samsung Support Chat,

> Sylvie
> This is a pre-installed app then which is included with device firmware.
>
> Sylvie
> It is actually a Samsung Electronics app used for syncing devices at home so you can control everything with your phone.
>
> Sylvie
> The pre installed apps which are included with the firmware can't be uninstalled.

---

According to OP's 2nd revision of the question (with copyedit),

> When I went on Malwarebytes, I discovered that it said:
>
> 1. It's a system app
> 2. *Updated: Dec 31, 2008*
> 3. This date is the same for automation test, some priv. something, and things like what's new, media storage, and lots of others.
>
> In conclusion:
>
> This is a pre-installed app. I don't know why someone said the customer support said it didn't, there is a company called MMI group and I think the app is some kind of test or something. It is pretty sketchy, but Malwarebytes is fine with it.

---
Tags: applications, samsung
---


# Question
Title: Move Whatsapp media folder to SD card without rooting?
Hello Android experts,

The internal storage of a Xiaomi Redmi 7A (Android 9) is running low, so I wish to free up space by moving Whatsapp media storage to the SD card. I moved the folder manually, but the big issue with that, that the data is going to be simply redownloaded again and the whole exercise would be futile. So ideally I need to set the media storage to SD card. But I am also open to other solutions to this problem.

The phone belongs to a child, that is why I wouldn't like to root it.

# Answer
Some apps are written to be able to use SdCard for storage, Whatsapp is not one of them.

You can see this in `Settings>Apps>Whatsapp>Storage` Apps that can work with SdCard have a `change` button here.

But in Whatsapp you can goto `3dotmenu>Settings>Storage and Data>Manage Storage` and then select a chat group and delete selected items from it.

* Teach your child to do that. They can't keep everything forever. And they can't have unlimited storage.
* Or upgrade the phone.
> 0 votes

---
Tags: whatsapp-messenger, storage
---


# Question
Title: STA(Internet)/STA(ultrasonic device) concurrency
I would like to pair an ultrasound device (AP) to a tablet via a 5GHz wifi (at 40 MHz) connection. At the same time the tablet should connect via 2.4 or 5 GHz wifi to the internet (AP). Unfortunately I cannot combine those 2 connections into one wifi, because if I do, the MDR (Medical Device Regulation) of the ultrasound device will be violated and it can't be legally used without a new certification. On top of that I need to use both connections simultaneously, because the transmitted ultrasonic pictures (which are displayed on the phone via an app) are to be streamed over the internet connection to a PC.

So summarized I have to APs and one STA device to connect simultaneously.

I have found an android interface named STA/STA Concurrency, which if I'm not mistaken should do the job. The problem I have now is, that I don't find a STA/STA Concurrency supported tablets or to be more precise I don't find any information about which device is supporting the STA/STA Concurrency.

The STA/STA Concurrency states that it needs/prefer:

* a 2x2+2x2 DBS Chip module
* the APIs "IWifiChip.setMultiStaPrimaryConnection()" and "IWifiChip.setMultiStaUseCase()" and
* the HAL Wi-Fi interface combination must have two concurrent STA interfaces exposed But again the manufactures do not show such detailed information.

Some Android phones have a dual-band WLAN option (like the Asus ZenFone 8) with which you can connect a 2.4 and 5GHz WLAN separately. Unfortunately, I can't find any information if these connections can be used simultaneously. YouTube Link

Somebody on Stackoverflow tried to create a STA/STA Concurrency with a automotive wifi chip. But there is no solution either.

Does anybody have a solution for this problem? Hardware or Software, I don't care as long as it works (the tablet will be just a first prototype).

(As an alternative I thought about using a windows tablet, put in 2 wifi cards, install Android (or Linux if necessary and a android emulator for the ultrasonic app) and assign the wifis accordingly. But there again, I need a tablet with 2 separate antennas.)

Thanks in advance!

P.S. I know this is kind of a half hardware question, so off-topic. I tired it on Hardware recommendations, but nobody has a solution to this. But since this can maybe be solved via software, somebody over here can help me.

# Answer
@Ben1401 I know it's late for this answer but Pixel 6a and 7a have the functionality that you are talking about.

https://issuetracker.google.com/issues/271014975#comment33 https://issuetracker.google.com/issues/232107693#comment5
> 1 votes

---
Tags: wi-fi, tablet
---


title: Emacs on Android

text:
# Question
Title: Emacs on Android
I would like to run Emacs on my Android phone. Has anyone done this? If so, how can I?

I've looked, and I haven't been able to find either an executable or instructions to compile emacs for Android.

I know CyanogenMod has some Unix commands, but I haven't found a list or whether it includes Emacs. I don't want to flash my phone without knowing.

I've seen many pages on running Emacs on "Android" via installing Ubuntu. I don't mean running Emacs on "Android" hardware, I mean running Emacs on the Android operating system.

I'm also aware I can use an app to SSH to a Unix box, and that there are online Emacs emulators. Again, not what I'm looking for.

I'm looking for the standard command-line GNU Emacs, and I'm aware I'll need to use a terminal emulator app to run it, as well as a Bluetooth keyboard to do anything useful. I'm not looking for a GUI app, though that would be better than nothing.

I'll accept either a link to a binary or instructions to compile it.

# Answer
I have ported Emacs to Android. (Github)

It doesn't draw UI like the Linux X11 version, but uses a modified Android Terminal Emulator.
> 12 votes

# Answer
From what I understand, it is not possible (at the time of writing this), since almost all the dependencies that are required for Emacs to run do not exist on the Android system. Then, even if you got all the dependencies to compile for ARM and Android kernel, it would take longer to start up Emacs than it would to SSH into another machine that has Emacs available.

If you want to try, you can look at this site which explains what you need to do to compile Linux binaries for Android devices. And here is how you build Emacs.
> 4 votes

# Answer
If you have Lollipop or above, Termux is a terminal emulator and Linux environment where you can install Emacs via `apt update; apt install emacs`. Or check out Running Emacs on Android on how to do get it running.

I have Emacs running on my CyanogenMod tablet using this method.
> 4 votes

# Answer
There is now an official release on F-Droid. Binaries can also be downloaded directly from the project page on SourceForge.

The official wiki page is also available.
> 2 votes

---
Tags: applications, text-editor
---


# Question
Title: Why does Hotspot get disabled on Galaxy S23+ when I receive a call?
I recently upgraded (?) from a Galaxy S8 to an S23+. On the S8, I could use the hotspot and receive a call at the same time, without any interruption. However, if I receive a call on the S23+, it instantly kills the hotspot so I can no longer use my computer when on the call. Very frustrating.

I tried asking the EE shop to resolve the problem, plus technical support twice. No one had heard of this problem, they say! I Googled the problem and learnt about VoLTE, which I understand prevented this problem on the S8 so that 3G calls used the 4G connection and did not kill my hotspot. Clearly, this does not do the same thing on the S23+.

I have tried doing 'network resets' and that doesn't work. I have tried only allowing 4G (in Settings/Mobile Networks) in the hope that VoLTE will work that way. It doesn't!

Surely someone else out there has encountered this problem, and hopefully, has a solution? Please help! Thanks

# Answer
I cant find a link (reference) but reading between the lines, it has to be `Wifi Calling`.

* For this to work, it has to use Wifi provided externally and you cant simultaneously use Wifi and provide a Wifi Hotspot.
* It is also possible that they want to remove any reason for voice quality to suffer.

So turn it off. It is under `Settings` \> `Connections`.
> 0 votes

---
Tags: samsung, wifi-hotspot, voice-over-lte
---


# Question
Title: USB Tethering option (to share internet connection with PC) is greyed out
> Most probably these question+answer will be deleted as duplicates, so please **do not vote here**. But if the answer is useful - add your upvote here: https://android.stackexchange.com/a/252613/251126 in order to bubble a good (my hehe) answer there

For years I used my phone as a backup connection to the internet (and you know - airports...)

Today I connected my phone to the laptop with my factory-default cable and tried to enable tethering - but the `USB Tethering` button in the menu was disabled.

How to make it enabled?

---

I checked the cable (several), and I use one that does the trick with another phone.

Recently I updated Android to v12

# Answer
> 8 votes
> Most probably these question+answer will be deleted as duplicates, so please **do not vote here**. But if the answer is useful - add your upvote here: https://android.stackexchange.com/a/252613/251126 in order to bubble a good (my hehe) answer there

So it turned out that I needed to dance around the phone a little.

## 1 enable "Developer options"

In two words: `Settings` \> `About device` \> `Version` and here tap "Build number" several times.

Or google this: `android YOURBRAND enable Developer options`

## 2 reset default USB settings

`Settings` \> `System settings` (at the bottom) \> `Developer options` \> **`Default USB configuration`**

I had *"No data transfer"* there, I changed it to **"USB Tethering"**

And also check the neighbor menu item **`Select USB configuration`**, my default value was *"Charging"*, so I changed it to **"RNDIS (USB Ethernet)"**

Now disconnect-connect the cable, and it should work

---
Tags: android-12, usb-tethering, oneplus
---


title: Rsync-like downloads over adb?

text:
# Question
Title: Rsync-like downloads over adb?
**NOTE**: I asked a similar question here several days ago, but I was told to re-post it to "Stack Exchange Software Recommendations", which I did. Now, I posted this current question to "Stack Exchange Software Recommendations", but I was told to re-post it here. I hope this current question indeed will now be accepted here.

I know that I can use `adb` from my desktop computer to take a backup of my sdcard ...

```
adb pull /sdcard/ .

```

This downloads everything from my sdcard to the specified directory on my desktop machine. However, I'm wondering if there is some way to download in an rsync-like manner: *i.e.*, only downloading and updating files that have actually changed between my device's sdcard and the directory on the desktop machine.

Or is there perhaps a non-adb-based way to do this?

Also, I want to initiate this from the desktop machine, not the Android device.

Any ideas?

**PS**: This is an Android-10 device, a OnePlus 7Pro (GM-1917) running OOS 10.3.2. However, the answer to my question is probably unrelated to that, since it has to do more with `adb` than the android device itself.

Thanks in advance.

# Answer
> 5 votes
Per the comment by alecxs, above, `adb-sync` gives me the functionality I'm looking for: https://github.com/google/adb-sync

Some day I'll also try `Adebar`.

Thanks to alecxs!

# Answer
> 2 votes
I tried the original adb-sync (https://github.com/google/adb-sync), but I couldn't get it to work due to an encoding error. The better-adb-sync fork (https://github.com/SelfAdjointOperator/better-adb-sync/) worked well, though.

Just note that the command line options are a bit different from the original, e.g. when you want to pull files from the phone (and not copy to the phone from your PC), you should use `--pull` instead of `--reverse`.

# Answer
> 1 votes
Run SimpleSSHD https://f-droid.org/en/packages/org.galexander.sshd/ and use rsync like you would with any other ssh-enabled server.

```
rsync -r -e 'ssh -p 2222' --info=progress2 user@192.168.74.123:/storage/emulated/0 ~/backup/sdcard

```

It's not exactly "over adb" but you could enable USB tethering on the phone and use the corresponding phone IP address to get a good transfer speed.

---
Tags: adb, rsync
---


title: Remove buggy bottom padding in Gboard

text:
# Question
Title: Remove buggy bottom padding in Gboard
My phone woke up in my pocket, I don't know how long, and now I have this big margin in Gboard.

All other functionalities look ok. Tried rebooting, but no luck there. The phone is a Poco X5 Pro.

How can I fix my keyboard?

# Answer
> 2 votes
This looks like **a new keyboard resizing feature introduced since Gboard 13.2.05.x.**

According to 9to5Google - Gboard rolling out an easier way to ‘Resize’ and customize your keyboard,

> “Resize” appears as another toolbar/tray option. Tapping takes you to a UI that starts by letting you make Gboard taller or shorter, \[...\]
>
> \[...\]
>
> If you’re not taking up all the available space, you can move the keyboard. **If you drag it up, you’ll see empty space beneath the last row/spacebar.** \[...\]

<sup>(Emphasis added)</sup>

---
Tags: gboard
---


# Question
Title: How to install the mathematical GAP-software on an Android phone?
*This was posted on MSE originally.*

Please note that my only training in programming of any kind is in the context of mathematics, specifically group theory. Thus, please use minimal technical language.

## The Problem:

> I'm trying to get GAP on my Android phone.

(I'm using a ZTE Blade V8. I doubt that matters.

**Update:** I'm using a Samsung Galaxy A40 these days.)

## What I have so far:

I found on the GAP forum that someone called Matan Ziv-Av compiled a version of GAP for Android that can be found here (and more specifically here).

This explains something I don't understand.

I have downloaded the latest file, last updated in 2015 (so it's gap4r6), but, upon opening it with RAR, I have been unable thus far to run the programme.

Here is a screenshot of the file I think I need to click on to get started:

(Click image to enlarge it)

I can't seem to get it working.

Please help :)

## Edit:

Using Termux with the file in the screenshot above, I got this:

(Click image to enlarge it)

# Answer
> 1 votes
**2023-08 Update**

Only use Termux from F-Droid or the github repository as the version from Google Play store is no longer supported.

Be aware that Termux may be unstable on Android 12+, as `Android OS will kill any (phantom) processes greater than 32 (limit is for all apps combined) and also kill any processes using excessive CPU`. See README section for details and links to workarounds

**0. Uninstall Google Play Store Termux**

* If Termux was installed from Google Play Store, save important data off of device. (If you don't have any important data, skip this step).
* Delete the Google Play Store version of Termux

**1. Install F-Droid**

When Termux updates, it will be easier to manage from F-Droid so first install F-Droid

* In your mobile browser go to https://f-droid.org/
* Click on "Download F-Droid"
* Install F-Droid by clicking on the downloaded package. Note if Android prompts you to "Open with", choose 'Package installer'

If you are having difficulty installing F-Droid, follow Step 2 to see if your browser is enabled to "Install Unknown Apps" and allow.

**2. Give Install permission to F-Droid**

* Go into Settings -\> Search (magnifying glass icon)
* In search bar type in "Install Unknown Apps"
* Tap on "Install unknown apps *Apps \> Special app access*"
* On the "Special access" / "Special app access" screen scroll down to "Install unknown apps" and click
* On the "Install unknown apps" screen look for F-Droid and click
* For the "F-Droid" app, enable "Allow from this source"

**3. Install Termux from F-Droid**

* Open F-Droid
* Tap the green search action button in the lower right.
* Type in "Termux"
* Tap on the one that reads "Termux Terminal emulator with packages" Note on the app store page there should be 'Versions' expandable which should have 0.118.0 or higher.
* Install Termux

You should now have Termux in your list of available apps.

**4. Launching and upgrading Termux packages**

* Launch Termux

Linux distributions support package management so the easiest way to install is via a package manager. Termux uses one as well which is documented in the wiki. Following the wiki use the command highlighted in grey:

* $`pkg upgrade`

Answer with 'Yes' to upgrades unless there is a known conflict with an existing installed package.

**4a. Check if the software package already exists**

As building from source takes storage space and knowledge it is best to check if what you are looking for already exists as a package.

Running the command in Termux:

* $`pkg search gap`

Listed out

> gap/stable 4.12.2 aarch64
>
> Gap is a system for computational discrete algebra, with particular emphasis on Computational Group Theory
>
> gap-packages/stable 4.12.2 all
>
> Packages for gap
>
> gap-static/stable 4.12.2 aarch64
>
> Static libraries for gap

**5. Install software package**

Run the command

* $`pkg install gap`

and enter 'Yes' you want to install. Should install gap at a cost of around 204 MB.

**6. Run software package**

Run `gap` as in other Linux/Unix-like environments

* $`gap`

**7. Leave Termux**

Termux when you swipe away will maintain the session and have a status bar notification telling the user that it is still running to keep its state.

Removing the notification requires stopping Termux from running. To end Termux just execute

* $`exit`

**Notes**

Termux behaves similar to a Linux/Unix-like system but out of the box you are limited to storing things within Termux app itself.

Do check the Termux Wiki to get familiar. If needed there are other Development environments available for Termux.

# Answer
> 3 votes
This is how I got it to run.

I'm using the download from here GAP for Android

Preparations: In termux type `termux-setup-storage` when prompted to give termux storage permission select allow. This is to give access to the sdcard in termux.

1. Make sure your connected to the internet.
2. In termux, type `pkg install wget` press enter.
3. Now to download the file type `wget my.svgalib.org/android/gap4r5-1.tar.gz` then hit enter.
4. Extract the file type `tar -zxf gap4r5-1.tar.gz` hit enter.
5. Type `cd gap4r5` hit enter.
6. Now we need to make a couple of changes to the script for it to run on termux. We will copy it to the sdcard Download file to be able to edit it. type `cp gap.sh /storage/emulated/0/Download/` hit enter.
7. Now open the file gap.sh in a text editor, I used Notepad++ for Android. This file is in your Download folder.
8. Edit line #1 to look like this `#!/data/data/com.termux/files/usr/bin/bash`
9. Edit line #23 to look like this `GAP_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"` **Its very important on this line to have the spaces exactly where they are and nowhere else.** then save the file. (Thanks for this line goes to Dave Dopson at this post Getting the source directory of a Bash script from within)
10. Go back to termux and type `cp /storage/emulated/0/Download/gap.sh .` (the period at the end is important) and hit enter.
11. Now you are ready to start using the program. to run the program make sure you are in the folder gap4r5 and type `./gap.sh`. (To get to this folder when you start termux type `cd gap4r5` or wherever you are in termux type `cd` hit enter and type `cd gap4r5` and hit enter).

Good Luck!

# Answer
> 2 votes
Since GAP is open-source you can download the sources and compile them on device in termux or another terminal emulator (though other terminal emulators don't provide the compilation tools AFAIK).

There are quite detailed compilation instructions in the "README.buildsys.md" file in the gap source directory, have a look at that for some more details. Here are the steps I did to compile it (after opening a termux shell), lines starting with "#" are comments and are hence suppose to help you understand what the following line(s) does.

```
# Install programs needed to compile gap
pkg install make clang m4
# Install some optional dependencies that probably enhance your gap experience
apt install readline-dev libgmp-dev
# Download sources
wget https://www.gap-system.org/pub/gap/gap-4.10/tar.gz/gap-4.10.0.tar.gz
# Extract sources and change to that folder
tar -xf gap-4.10.0
cd gap-4.10.0
# Create a build folder to keep source directory clean
mkdir build
cd build
# Configure the package, if you want special features you probably want to change this line
../configure
# Compile the package
make
# Run GAP!
./gap

```

Please let me know if you run into any errors (I might have missed some dependencies) or if I should explain something in more details. Also note that you have to compile and run gap from termux's folder structure (`/data/data/com.termux/files/`), android doesn't allow executable files in the shared storage (like the external and internal sdcard).

---
Tags: installation
---


# Question
Title: How can an Android user know which Project Mainline modules their device supports?
Project Mainline (officially "Modular System Components") introduced a set of OS components that Google can update via *Google Play system updates*.

Some of these modules are mandatory for OEMs to support depending on the version of Android that the phone ships with, but **some of these modules are optional. OEMs can choose to add support for more modules when updating to a new version of Android, as well.**

As the title states, **how can an Android user determine which of these modular system components their phone actually supports?**

# Answer
> 1 votes
*Note: user IrfanLatif answered this question in a comment under the original post.*

Each "Modular System Component" is stored as a single `.apex` file in `system/apex/` or `vendor/apex`. The name of each file in this directory indicates which module it is. For instance, `system/apex/com.google.android.tzdata.apex` is the time zone data module (https://source.android.com/devices/architecture/modular-system/timezone).

I was able to see these files using a file explorer app, no root access necessary.

# Answer
> 2 votes
You can run `/system/bin/pm get-moduleinfo --installed` to list all installed modules with their package name and package label. Running `/system/bin/pm get-moduleinfo --all` lists all available modules (possibly some that are not installed) currently known for that Android release

# Answer
> 1 votes
Try this app of mine: Mainline Module Info/Updater

Screenshot of the app:

---
Tags: updates, system, aosp
---


# Question
Title: USB tether to router and then connect to the WiFi of the router no longer possible on recent Android versions?
I have somewhat of an unusual problem that wasn't a problem a few months ago, I had an Xperia X with Android 8 on it, and I used it to provide Internet (4G) for my devices using a router. It worked like so:

1. Connect to the router's USB
2. Configure router
3. Enable USB Tethering from the phone
4. Internet

This is the usual method, of course. The thing is, I have a NAS attached to the router as well, and I used to enable the WiFi on my phone (with USB Tethering on), and sync/connect with the NAS without losing Internet connection.

I upgraded to a Pixel and then a Samsung running Android 11, 12, and now 13, and there seems to be a change in what WiFi is. It's now related to the "Internet" instead of being a networking means that can be used to get files from a local server offline. Now because of this change, whenever I connect to the WiFi network of the router, I lose Internet (on Samsung) or simply the WiFi wouldn't even connect unless I disable the data (Pixel).

Is there a solution to restore the old behavior or at least workaround it?

# Answer
I got around this by connecting a $50 Amazon USB-C Dock with a 1Gbs Ethernet port connected to an Android phone (Samsung Galaxy S22+ Ultra, 256GB, latest updates), then turning on ethernet tethering works like a charm. I connect it to a DD-WRT ACM3200 Linksys and share 5G with the network via ethernet and WiFi and get 300Mbps down and 50-60Mbps up, from ethernet and WiFi access from devices connected to the router.

I use it in a warehouse in the boonies and has no problem with 4 NetGear Arlo cameras, Samsung SmartThings with 2 Kwikset 914 ZigBee (door locks now on the remote control and a history log of when locks were unlocked), a laptop (with TeamViewer access for remote control), and 4 WiFi energy monitoring outlets to all things but ceiling lights, running 24/7.

I also use AirDroid to remote control the Android phone in case the ethernet tethering disconnects so I can re-enable it, but after the first few days, it has been stable for weeks.
> 0 votes

---
Tags: wi-fi, usb-tethering, router
---


# Question
Title: Would I be able to install Brave and Proton Mail on GrapheneOS?
I'm thinking about picking up a Google Pixel 4 and installing GrapheneOS.

Would I be able to install apps like ProtonMail and Brave somehow?

# Answer
You've probably already found the answer in the last two and a half years, but yes you can install any android apps on GrapheneOS. You could always side-load any app or install from sources like fdroid or the aurora store, but now you can also install the Sandboxed Google Play Services and use the play store as you would on stock android.
> 1 votes

---
Tags: applications, custom-roms, installation
---


# Question
Title: Enable gesture (swipe) input (on Fairphone 2) without Google Keyboard
I have Fairphone 2 running Fairphone Open OS, and I'm making a quixotic effort to avoid installing non-free (as in freedom) software on it and to optimize privacy.

I want swipe input, but I don't want to install Google Keyboard, (LatimeImeGoogle.apk) By default, the OS has AOSP keyboard. I've also installed the wonderfully code-friendly AnySoftKeyboard (which also has awesome themes) and Hacker's Keyboard from F-Droid, but though they are useful to me, they don't have swipe input.

I've read this post which makes me think I have to get the source and compile the keyboard. I don't know how to do this at the moment, but I'm prepared to learn. I tried just replacing the library (by cheating and taking the correct library from the Google apk) mentioned in the post, and nothing changed (if I delete the library the keyboard stops working completely, so clearly I am making a system change by replacing it - it just doesn't do what I want).

I would like any of the following, in order of preference

1. a nice code-friendly FOSS keyboard with gesture input
2. a simple\* way to enable gesture input for AOSP
3. confirmation that I do, in fact, need to build AOSP myself to do what I want
4. any other relevant advice(!)

Obviously, I have root :)

\*I have an Ubuntu system to play with on my laptop if it helps...

# Answer
> 4 votes
## The problem

The default AOSP keyboard does not ship with swipe. It will not appear in the settings. The easy (but awkward) reason is that Google considered this feature to be too "secret" or so to release it in the open source code and thus they ship it in a proprietary library.

## The solution

If you want, you can push that library to your device after the ROM installation (and each update!). It is named `libjni_latinimegoogle.so` and needs to be put in `/system/lib`.

For me (Android 7.1, ARM) this lib was a really small (944 kB) and oldish (updated 2008) thing. (sha256sum: `442a2a8bfcb25489564bc9433a916fa4dc0dba9000fe6f6f03f5939b985091e6`)

## Detailed guide

1. Download the correct Google Apps from http://opengapps.org/. (although I guess the lib may be the same for some versions, but well… just download the correct one)
2. Now get into the ZIP, respectively extract it. In the `Optional` dir you'll find another archive `swypelibs-lib-arm.tar.lz`. Extract that and you'll get the `libjni_latinimegoogle.so` file.
3. Now have your phone/device ready in recovery mode. Make sure to mount the `/system` partition in a writable way. In TWRP you have to go to "Mount" -\> (if needed, uncheck) "mount /system in read-only" and then mount it by checking the box for "/system".
4. Now just push to file to your phone (`adb push /path/to/libjni_latinimegoogle.so /system/lib`) and restart.

It should work!

## OTA survival

I said you need to do this for each update. You can, however, also create a small OTA survival script, which backs up the file when the system is updated.

Here is my (currently, experimental) proposal:

```
#!/sbin/sh
#
# /system/addon.d/95-latinimegoogle.sh
# During an OS upgrade, this script backs up /system/lib/libjni_latinimegoogle.so,
# /system is formatted and reinstalled, then the file is restored.
#

. /tmp/backuptool.functions

list_files() {
cat <<EOF
lib/libjni_latinimegoogle.so
EOF
}

case "$1" in
  backup)
    list_files | while read FILE DUMMY; do
      backup_file $S/"$FILE"
    done
  ;;
  restore)
    list_files | while read FILE REPLACEMENT; do
      R=""
      [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT"
      [ -f "$C/$S/$FILE" ] && restore_file $S/"$FILE" "$R"
    done
  ;;
  pre-backup)
    # Stub
  ;;
  post-backup)
    # Stub
  ;;
  pre-restore)
    # Stub
  ;;
  post-restore)
    # Stub
  ;;
esac

```

Also available on GitHub: https://gist.github.com/rugk/a4c9fa11c5c031faf45602d6bf922a1c

1. Just save that file, push it your device into the `/system/addon.d` dir (`adb push 95-latinimegoogle.sh /system/addon.d`). (Yet again, you have to make sure `/system` is mounted.)
2. And make it executable: `adb shell` into your device, go to the dir via `cd /system/addon.d` and: `chmod +x 95-latinimegoogle.sh`.

# Answer
> 4 votes
1. The OTA survival script/configuration fragment hack stopped working on the OnePlus 3T after the last OEM firmware update from OnePlus. (Even though the final OEM firmware update for the OnePlus 3T was relased by OnePlus in July 2019, I feel compelled to still write this because I have not seen anyone mention this so far.) I think this is because the LineageOS maintainers of `oneplus3` started using digest files and this verifies system components against some set of signing keys, which will always cause the phone to vanish the custom OTA survival script. So, this means you are limited to the "top" half of the solution from rugk. So, according to my experience with the phones I have, I think the "bottom" part of the solution only works on either: older 32-bit Android devices (such as the OnePlus One/`bacon`) or any 64-bit Android devices with LOS builds that do not use digest file checking. (I do not know how to check for this on arbitrary LOS-available devices.)
2. The `libjni_latinimegoogle.so` hack requires TWRP as your custom recovery to work. Since LOS 17.1-18.1, Lineage Recovery has been offered for any device with LOS builds. However, do not use Lineage Recovery if you use this `libjni_latinimegoogle.so` hack. For some reason, if you have Lineage Recovery, the `/system/lib64` directory simply does not exist, even when you mount the device storage via Lineage Recovery. This was observed on a OnePlus 3T/`oneplus3`.
3. Based on what I have read, I infer that this `libjni_latinimegoogle.so` hack will simply not work on any custom ROM that properly implements verified boot via relocking the bootloader. As of May 2021, CalyxOS and GrapheneOS are 2 ROMs which use verified boot. So, dropping `libjni_latinimegoogle.so` among system files will probably be prohibited. Even if this gesture typing library hack was hypothetically possible, I feel like that would be an extremely bad security practice/move. Instead, if your use case/threat model allows for open source third-party keyboards, I would recommend FlorisBoard, which has recently implemented what it calls "glide" typing and is available on F-Droid. (Just to be clear, I am not affiliated with CalyxOS, GrapheneOS, or FlorisBoard.) AnySoftKeyboard promised some sort of glide/gesture typing, but that was back in 2018 and ASK never fully implemented this feature, back when I tired ASK once in 2020, IIRC.

# Answer
> 1 votes
**Update for Lineage OS 17.1 (Android 10.0)**

Based on this Reddit, step 4 of *rugk’s* detailed guide differs as follows (using TWRP since pushing the file with adb didn't work):

* transfer `libjni_latinimegoogle.so` onto your phone (`/sdcard`)
* start TWRP, check under "Mount" that `system` is mounted and "read-only" is not checked
* launch the command line under "Advanced » Terminal" and enter the following commands:
* `mv /sdcard/libjni_latinimegoogle /system/product/lib/`
* `chmod 644 /system/product/lib/libjni_latinimegoogle`
* `cd /system/product/app/LatinIME/lib/arm/`
* `rm libjni_latinime.so`
* `ln -s /system/product/lib/libjni_latinimegoogle.so libjni_latinime.so`

The above solution works like a charm with a Samsung S5 Neo (s5neolte/SM-G903F) and Lineage OS 17.1 (Android 10).

As mentioned above, you can extract `libjni_latinimegoogle.so` from Open GApps. Concerning the download options, it doesn't matter that much which Android version you choose. It seems the file hasn't been changed at least since Android 7.1. I used the following settings:

* Platform: arm
* Android: 10.0
* Variant: nano

# Answer
> 1 votes
A simple pre-built solution is now available in the form of OpenBoard with Gesture Typing, a fork of OpenBoard which I believe just adds the proprietary swipe library. Also AnySoft Keyboard does now have gesture typing, though I've not found it to be as good.

---
Tags: keyboard, input-methods, gesture-typing
---


title: Disable Screenshot Security

text:
# Question
Title: Disable Screenshot Security
Some apps don't allow screenshots so how can I still take a screenshot?

It is my phone and I should be able to do whatever I want with it so why is there even a feature to disallow screenshots?

Android 5.0.1

# Answer
# Note: this answer is a bit outdated as of August 31, 2022. Will try to update it soon.

### Why apps prevent screen capturing, and how to disable the restriction

Some apps present sensitive data (e.g. banking apps) or copyright-protected content (e.g. video streaming apps). App developers can opt to use the Android platform’s `FLAG_SECURE` setting to prevent the screen from being captured, recorded, or shown on “non-secure displays” such as the recent apps view. There are a couple of ways to disable this flag:

1. Smali Patcher module for Magisk. Magisk is officially supported on Android versions 4.2–12.0.
2. DisableFlagSecure module for Xposed. Xposed is officially supported on Android versions 5.0–8.1.

The Smali Patcher method requires you to connect your phone to a PC and run a Windows program to actually generate the module. Note that Magisk on Android 4.2 does not support MagiskHide.

The Xposed method has a big caveat: many banking apps use Google’s SafetyNet platform for checking device integrity, and prevent the application from being used on devices that have Xposed installed. This renders the module useless in SafetyNet-enabled apps, and there is currently no way to hide Xposed from SafetyNet.

**Use these modules with caution, as they disable the flag *system-wide*.**

### Taking a screen capture of your phone on your PC

If you can’t or don’t want to disable `FLAG_SECURE` on your phone, you can also use scrcpy. It lets you mirror your phone’s display to your computer, and then you can just use a screenshot software of your choice on your computer to capture the phone’s screen. This requires you to turn on ADB debugging from your phone’s development settings, but beware that some apps restrict their functions when they detect that development settings are enabled. Scrcpy works on Android versions 5.0–12.0.
> 35 votes

# Answer
You can use Scrcpy or Vysor app and project your android screen to computer screen and then take screenshot on your PC.
> 5 votes

# Answer
There's also Smali Patcher program for Windows which creates custom Magisk module for your device and has option to disable `FLAG_SECURE` system-wide.
> 3 votes

# Answer
Apps which are set with LayoutParams.FLAG\_SECURE flag do not allow screenshots (or videos recording) to be taken. It is of-course your phone but the app belongs to its owner (and he can rightfully wish to prevent users from capturing something sensitive in nature). You're barred from taking a screenshot only for those screens that have the above flag set. However you can still take a screenshot by projecting your phone on the PC screen and capturing it. That way, the device has no idea that screenshot is taken.
> 2 votes

# Answer
Just for those guys who came here by error in Chrome Incognito mode

**Can't take screenshot due to error policy**

There is a special flag `Incognito screenshots` that can be accessed via

```
chrome://flags

```

The default value is disabled but if you enable it, you are done. Screenshots are allowed.
> 2 votes

# Answer
In some banks you must log in first and disable security measures in regards to mobile applications. I did it with my bank.
> 1 votes

# Answer
I've found a workaround: from the app that is blocking screenshots press the Home button/gesture and then the Recents button/gesture so you can see the app you want to screenshot; you can then screenshot with the normal button shortcut or the on-screen "screenshot" button (and the resulting screenshot will not be blacked-out).

This worked for an over-zealous app which didn't want me screenshotting a specific screen but not for a well-made app (i.e. a browser in incognito mode), so it's almost certainly an exploit that might be patched rather than intended behaviour. Tested on android 9 and 12.
> 1 votes

# Answer
Following on from 'user's' answer, using a program such as Droid@screen droid at screen will allow you to project your phone screen to the PC, and then screenshot it via the PC Prnt Scrn button.

UPDATE: Android screen mirror is a better and faster screen mirror

https://github.com/adakoda/android-screen-monitor
> 0 votes

---
Tags: security, screenshots
---


# Question
Title: Switch Do not Disturb and Silent mode based on schedule automatically
I always have my phone on silent. I use my Garmin watch to give me notifications, then look at my phone and pick up if needed, etc.

However, during the night, I'd like to allow my parents to call me and for my phone to ring (aloud) so that it wakes me up as they're old and it may be an emergency. (I don't wear my watch at night).

I realise that I can set up a DND profile and allow "starred contacts" to call me, however this means that every night I need to remember to turn my ringer on, so that once the DND setting has allowed the call through, I can hear my phone ringing.

Is there any way to automatically make my phone move to "ring" rather than "silent" at the same time as DND kicks in, or is there another way?

Phone is a Pixel 6.

# Answer
I have used LLama Location Profile before but its no longer being updated. I would suggest Automate

> Automate your repetitive or complex tasks:
> Manage files on your device and remote storage
> ☁ Backup apps and files
> ✉ Send and receive messages
> Control phone calls
> Access online content
> Take pictures, record audio and video
>  Configure device settings
> Integrate apps
> ⏰ Start manually, based on your location, time of day and other triggers

There are others such as Tasker and IFTTT but I havent used them much.
> 0 votes

---
Tags: automation, silent-mode, do-not-disturb
---


# Question
Title: How to get the phone production date via ADB?
How can I get programmatically when the phone was manufactured?

Is there any framework, instrumentation or toolset like Windows WMIC that allows unequivocally get hardware parameters of the device?

I found this question but it is old, related to Motorola and has no answers, that is why I decided to ask a new one. I am seeking solution for Samsung phone, but vendor-agnostic way will be way better.

I know about IMEI way of checking the production date, but I want something more accurate that can be a double check.

Thanks.

# Answer
Grabbing the exact manufacturing date of a phone programmatically is not a straightforward task, and there is no standard framework or `API` in Android that provides this information aka manufacturing date is not a an `exposed parameter` in the device's hardware or software.

`IMEI` way you mentioned is one of the methods to get an approximate manufacturing date, but it's not always accurate,

The closest I have come to getting this info consistently on all Android versions is this ( `build.prop metadata` )

```
stat -c %y /system/build.prop
2020-12-31 20:30:00

```

On some Android devices this date maybe stored in specific files depending on propriety flavor of Android used ( e.g. MIUI or colors Android ) and Android version. Below are just some pointer approaches to dig it out , rummaging through usual places.

```
find /sys/fs/pstore/ /var/log/ /data/logs/  <your  other paths>   -type f -exec cat {} \; | grep -E "First boot|Installation date"'

 { cat /proc/kmsg /sys/fs/pstore/dmesg-ramoops-0; logcat ; } | grep -i -E "First boot|Installation date"

```
> 0 votes

# Answer
It can be difficult and occasionally impossible to determine a phone's exact manufacturing date programmatically, especially on Android devices because of **privacy and security constraints**. The manufacturing date of a phone is not directly accessible via a standard Android API or framework. Using the `Build` class, you can get the build time as shown below:

```
val buildTime = Build.TIME

```

Remember that this represents the *`time at which the firmware was created`*, not the date the device was manufactured.
> -1 votes

---
Tags: adb, samsung, hardware, samsung-galaxy-s-21
---


title: Prevent play store from installing apps

text:
# Question
Title: Prevent play store from installing apps
The Google play store has a line in their TOS that gives them the right to install arbitrary apps/updates without consent of the user.

Sadly, some apps appear to require play store to be enabled to work (eg. the official chatGPT app).

Is there any way to remove the play store as an acceptable app installation source, to completely prevent the risk of it installing something without explicit consent?

# Answer
> 0 votes
Suggestions

1. Root the device and you have full control.
2. `Play Store > Your Icon > Settings > General > Network Preferences > Auto Update Apps > Don't auto-update apps`. **This might still update system apps**.
3. `Play Store > Your Icon > Settings > General > Network Preferences > Auto Update Apps > Over Wi-Fi Only` and don't use Wifi. **This should stop all updates**.

# Answer
> 0 votes
Choosing \[Don't auto-update apps\] from \[Auto-update apps\] should do the trick. Play Store needs the permission to install packages in order to keep Google Play Service and some modular system components up to date - These house-keeping jobs look legitimate.

---
Tags: google-play-store, security, installation, permissions
---


# Question
Title: Error disabling Parental Control on my child's Samsung Galaxy S10
I can't disable Parental control or add my own account on my son's Samsung Galaxy S10. The only option available since my son is only 9 is to remove or delete the account.

As per updated Google Play services version 23.24.14 2023, they recommend the device for factory settings.

Is there any other way?

# Answer
> 0 votes
If it was easy to remove Parental Controls, the kids would do it. If you can not remember the PIN or if you are seeing an error then **Factory Reset** is the only way.

You will see some sites say that deleting data from Google Play Services App will clear Parental Controls. You can try it, but I don't think it will work. Its no big deal, I am sure your child will soon download every thing that will lose.

# Answer
> 0 votes
To stop supervision of your kid's phone, you might wanna try this (from his device): Google For Families Help - Add & manage supervision on a current Google Account

> Stop supervision with your child's device
>
> > If you added supervision to your child's existing Google Account, your child can also turn off supervision themselves. If your child turns off supervision without your permission, you'll be notified and their supervised Android devices will lock temporarily.
> > **Important:** To stop supervision on your child’s device, it must have Android 7.0 or higher.
> >
> > 1. On your child's device, open Settings .
> >     * On Android versions 8.1 (O) and later, tap **Digital Wellbeing & parental controls**.
> >     * On other Android versions, tap **Google \> Parental controls**.
> > 2. At the top right, tap More \> **Stop supervision**.
> > 3. To verify you are a parent, sign in or use your Parent Access Code.
> > 4. To turn off supervision, follow the on-screen instructions."

---

As for adding another account, why not create a new profile by allowing multi user then sign in your own account in that new profile - Search for 'user' from phone settings app.

---
Tags: samsung, parental-control, google-family-link
---


# Question
Title: Impact of location access (global setting in device's settings) on battery power consumption when there are no apps accessing it?
I vaguely remember a post whose author stated that having a global location access setting in an off state does not discharge an antenna and it continues working in a "passive mode".

So the only change that is made to device's functioning when turning on the setting is that it allows apps to request high-power consumption geolocation (provided that they have the individual per-app permission). For example, Google Maps.

Does that mean that there is no difference in battery power consumption between having it on and off unless you are using an app that requests your geolocation (such as Google Maps)?

# Answer
It does consume battery whether you are using the app or not but the consumption may be lesser.

From Access location in the background, which describes different types of location access permissions:

> If background location access is essential for your app, keep in mind that Android **preserves device battery life** by setting **background location limits** on devices that run Android 8.0 (API level 26) and higher. On these versions of Android, if your app is running in the background, it can receive location **updates only a few times each hour**. Learn more about background location limits

(Emphasis supplied)

This behavior may vary if your device is running lower than Android 8.
> 3 votes

---
Tags: battery, battery-life, android-11, geolocation
---


# Question
Title: "The device has either stopped responding or has been disconnected" error when copying a large file from Windows
I am trying to copy a large file (11 GB) from Windows using File Explorer, i.e. drag'n'drop to an Android device (Nexus 7, Android 4.4, 32 GB), but I get this error:

> Cannot copy item
> The device has either stopped responding or has been disconnected.

There is 26 GB available storage on the device. I can copy a small file with no problems. I was able to copy a 4.9 GB file. The device is connected via USB and USB debugging is enabled.

What is the problem?

# Answer
The simplest way that works for me is to go to Settings \> Developer options \> Select USB configuration. First, select Audio source while connecting to the computer, then select Media Transfer Protocol (MTP). The device driver will install automatically.
> 1 votes

# Answer
You might have an unstable MTP connection - Try swapping USB cable/getting rid of the USB hub if any. Performing a system update of your device will probably help, but it's a long shot.
> 1 votes

---
Tags: file-transfer, windows
---


# Question
Title: How to check if used Samsung Galaxy S23 has original bootloader, firmware, and software?
I bought a used Samsung Galaxy S23 from a large online seller. How can I check that all the software and firmware is original and not tampered with?

I already did a factory reset from the settings menu. I'm wondering if there's a way to check the bootloader, firmware and other important systems.

I tried rebooting into Download-mode (phone off, hold both volume buttons and plug in USB power), and the Knox status says KG STATUS: CHECKING(00). It never updates away from "CHECKING".

Note that I don't have a SIM card yet. The phone was sold as originally Verizon locked but is now unlocked.

# Answer
> 0 votes
Search for Safetynet checker on Google Play, download it then run the check. If the results were good then it's very likely that you have a stock/original system image from device manufacturer.

---
Tags: samsung, bootloader-lock, samsung-knox
---


# Question
Title: How can I export the list of open Chrome tabs?
Chrome's sync feature isn't picking up all of the tabs open on my Android phone.

Are the tabs stored in a file somewhere that I can access?

My intention is to export the list of tabs so that I could run a factory reset on the device.

Running Android 4.3

# Answer
You can use the Remote Devices feature in the Chrome debugger to connect to Chrome on the device and access the tabs. Just expand the list of tabs visible to get the full list and then highlight & copy everything shown (including the URLs) to the clipboard: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

I just managed to export ~400 tabs this way.
> 58 votes

# Answer
*Update October 2022*: As per Remote debug Android devices, the `chrome://inspect/#devices` page has replaced the `Remote devices` debugger panel, breaking the JS in this answer and similar ones.

---

Just joined this StackExchange to show some appreciation for Jeremy's answer above, and also add the few lines of JS I used to export the tabs list (since copying with the cursor isn't ideal!)

As Jeremy said, select `Remote devices` under `More tools` on Chrome devtools  icon (top right of the panel):

* set up USB debugging on your phone (under `Settings``Developer options`, root not required)
    + note that you must enable the `Developer options` menu, it's hidden by default to protect users
    + on my phone this required tapping multiple times on the build number under `Settings``About Device`
* once this is done, plug your USB in and allow MTP connection
* when the Chrome devtools remote device panel is open, the phone will then request to allow USB debugging
    + you can opt to always trust the computer

Now the device is connected,

* open a 2nd devtools view on the devtools view from which you selected `Remote devices` to be able to retrieve the list of tabs using JavaScript
    + note that you must have devtools in pop-out mode (use the vertical ellipsis symbol in the top right of the panel) to be able to get this up, otherwise Command+Option+J(MAC) `Ctrl`+`Shift`+`J`(WINDOWS) will just close the first devtools panel.
* expand the list from the first few items to all tabs by clicking 'Show more'
* to script against the list, use the following few lines of code \[entered in the console of the 2nd devtools window\]

To export a list of all URLs open on Chrome for Android, I chose to just make the list into a markdown formatted text string and copy it to the clipboard

```
let bookmarkList = Array.from(document.querySelectorAll('.widget>.vbox'))
  .map(e => e.shadowRoot)
  .map(e => e && e.querySelector('.device-page-list'))
  .find(e => e);

let bookmarks = Array.from(bookmarkList.querySelectorAll('.vbox'))
  .map(e => `[${e.querySelector('.device-page-title').innerHTML}](${e.querySelector('x-link').innerHTML})`);

copy(bookmarks.join('\n'));

```

You will then have a list on your clipboard looking like this:

```
[How can I export the list of open Chrome tabs? - Android Enthusiasts Stack Exchange](https://android.stackexchange.com/questions/56635/how-can-i-export-the-list-of-open-chrome-tabs)
[Get Started with Remote Debugging Android Devices  |  Tools for Web Developers  |  Google Developers](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/)
[How To Enable USB Debugging On Your Android Phone](https://www.groovypost.com/howto/mobile/how-to-enable-usb-debugging-android-phone/)
[Configure On-Device Developer Options | Android Studio](https://developer.android.com/studio/debug/dev-options.html)
...

```
> 52 votes

# Answer
tl;dr:

* have the Android command line tools installed on a development machine, and USB debugging enabled on your device. The device does not need to be rooted
* `adb forward tcp:9222 localabstract:chrome_devtools_remote`
* `wget -O tabs.json http://localhost:9222/json/list`

Details:

If you have the Android command line tools installed on a development machine, and have enabled USB debugging on your Android device, then you can do the following:

* Execute `adb forward tcp:9222 localabstract:chrome_devtools_remote` on your development machine.

Chrome instances expose access to a debugging protocol via a unix domain socket with the abstract address "`chrome_devtools_remote`". The above `adb` command forwards requests made to port 9222 on your development machine, onwards to that unix domain socket. (You can get a list of all the unix domain sockets on the Android device by typing `adb shell cat /proc/net/unix`.)

Using this, we can run `wget` or `curl` (or indeed, a browser) and retrieve information from the mobile device's chrome instance.
* Debugging information is provided as JSON data over HTTP. A JSON file listing the open tabs can be got by executing `wget -O tabs.json http://localhost:9222/json/list`.

(Other endpoints of the API can be found at https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api.)

See here for more details on enabling USB debugging, and here for an overview of how it works.
> 43 votes

# Answer
I came across this solution when I was looking to recover tabs that had been permanently closed after my browser crashed one day. In order to access the information you require, **your device needs to be rooted** so you can run a file explorer app with access to the root files installed on your device. ES File Explorer or Root Explorer are my recommendations.

1. Navigate to the root folder of your device (the protected system partition) → select `DATA` → select `com.android.chrome`.
2. There are several places where you may find information about your current tabs.

1. The first folder to check is `app_tabs`, then `0`. In this folder there should be a file called `tab_state` which contains a list of all your current tabs.
    2. There are also other files in this folder called `tab3`, `tab4`, etc. that contain info about current tabs.
    3. IMO, you need a special "text editor / sql editor" to read the content of some of these files as the encoding is different.
3. Next place to look is `/data/com.android.chrome/app_chrome/Default/`. In this folder you'll find a file called `History`. Depending on your situation, you may find a good list of recent site visits here.
4. Finally, navigate to the `Sync Data folder`. In here, you will find the information that's being synced to Google (and this should include all the tabs you currently have synced on other devices).

* In the file `SyncData.sqlite3`, you'll also find a history of all your Google searches (which I sometimes find to be an interesting read).
    * You'll need an Sqlite3 data browser program on your PC in order to read this file. The app should be able to export to a highly usable `.CSV` or `.XLS` file that you can open in **MS Excel**.

This could be helpful to someone I assume.
> 15 votes

# Answer
The most recent answer by simonsan is not working on my current Chrome build `75.0.3770.100`. I don't have the `vbox` class that is used in every script posted, so I managed to write a code that is working now:

```
tabs = document.querySelectorAll('#devices div /deep/ div /deep/ div /deep/ div /deep/ .row')
str = '';
for (i=0;i<tabs.length;i++){
  if (tabs[i].querySelector('.name').innerText != null){
    str += '- ['+tabs[i].querySelector('.name').innerText + '] (' + tabs[i].querySelector('.url').innerText +  ')\n'
  } else {
    console.log(tabs[i])
  }
}

```

I've found Louis Maddox's post and *screenshots* very useful to decipher his script so here is mine with the updated tree.

---

Anyway the solutions proposed to overcome the 100 char cap didn't work for me therefore I decided to edit the `inspect.js` from the source following these steps:

1. Download the chrome-pak-customizer and unzip it.
2. From `C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100` (where `75.0.3770.100` is the name of the build) make a copy of the `resources.pak` in your Documents folder, drag the copy and drop it on the `unpack.bat` in the unzipped folder.
3. In `\document\resources_unpaked\` take the `11208.js` and open it.
4. On the line 537 or by looking for `100` there are these lines

```
  let text = value ? String(value) : '';
  if (text.length > 100) {
    text = text.substring(0, 100) + '\u2026';
  }

changing the 100 to 300 should be enough, it may cuts some google search links but mine where still working.

```
5. Save the file and in the same folder drag the `pak_index.ini` and drop it on the `pak.bat`. now the `resource.pak` in `\documents\` has been updated with the changes.
6. Make a backup of `resource.pak` because you never know, close Chrome and replace the orginal with the updated version.

Now the script will show up to 300 chars for the urls.
> 4 votes

# Answer
This workaround will give you a text file with individual URLs for all tabs you have open in Chrome for Android.

1. As mentioned in this answer by Michael, you have to grab the file that contains the current tabs. Using a root explorer on the device, grab this file and move it to your choice of folder in windows: `/data/data/com.android.chrome/app_tabs/0/tab_state`
2. Install GNU Tools for Windows
3. Sometimes there's a weird arrow-character in the file that screws up the script. If you run the script and it truncates part of the file, look at the last character and it'll probably be that weird arrow character. Find/replace it in the original file. Once it's gone, the script will run fine. It looks like this: `-->`
4. Go to command line prompt (go to "Run" or `Win`+`R`, and type `cmd`) and navigate to the folder which contains `sed.exe` (wherever you installed it in step 2.)
5. You'll probably want to move the original file (`tab_state`) to the same folder containing `sed.exe`. It'll make everything easier. Once you've done that, run this script:

```
sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state

```
6. This will modify the file with all of the URLs formatted correctly. Open the file as a text file and then copy and paste the contents into a Word document or some other location. For some reason, if you don't copy and paste the data out, when you save the file it erases all of the line breaks/carriage returns. If things screw up, just start over and do it again. When it's all said and done, you should have a file that contains a list of links to all the tabs you had open before.
> 3 votes

# Answer
You need to be root or Chrome to read `/data/data/com.android.chrome/app_tabs/0/tab_state0`

You can use this dirtycow exploit on vulnerable devices to become Chrome and get `tab_state0` from an attached device:

```
make root
adb shell
run-as com.android.chrome
chmod 711 /data/data/com.android.chrome/app_tabs/0
chmod 644 /data/data/com.android.chrome/app_tabs/0/tab_state0
exit
cp /data/data/com.android.chrome/app_tabs/0/tab_state0 /sdcard/
exit
adb pull /sdcard/tab_state0

```

Once you have access to `tab_state0`, extract the URLs:

```
LC_ALL=C grep -a -o 'http[[:print:]]*' tab_state0

```
> 3 votes

# Answer
Instructions for Brave! You can replace the code in the console from Louis Maddox with this one, this is working as of today `Brave Version 1.0.0 Chromium: 78.0.3904.97 (Official Build) (64-bit)`. Remark: You can open a new console window of the remote devices window if you activate the remote device window and press `Ctrl+Shift+J`

```
tabs = Array.from(document.querySelector('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div.vbox.flex-auto').shadowRoot.querySelectorAll('.devices-view .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').getAttribute('href')}))

str = ' ';

tabs.forEach(e => {
    str += '- ['+ e.name + '](' + e.url +')\n';
})
copy(str)

```

Then you can paste all your tabs in a textfile.

If you want to open all the tabs on your actual device replace the `tabs.forEach`-part with

```
tabs.forEach(e => {
    window.open(e.url, '_blank');
})

```

Don't try that with too many open tabs on your device, though.

I added this after the `tabs` part to manually synchronize opened tabs (brave still missing this feature and I had 650 opened tabs on my mobile device) in charges of 50 tabs:

```
i=0;
j=0;
tabs.forEach(e => {
  if(i<50){
    i++;
    window.open(e.url, '_blank');
  }
  j++;
})
console.log("Tabs overall:"+j);

```

This will open a batch of 50 tabs from your device into the opened browser window. It also shows the overall tab count. Don't close the remaining 'empty'-tab for those developer tools and the remote device though, if you want to open another batch. With `Ctrl + TAB` you switch through the tabs, `Ctrl +D` to bookmark them and `Ctrl+W` to close active tab. That's the way I did it manually, feel free to propose changes to this code for making everyones life's easier.
> 3 votes

# Answer
Michael identified the tab\_state file, it remains to decode it. The following script worked for me (in kitkat KSH\_VERSION='@(#)MIRBSD KSH R43 2013/02/19' or xenial BASH\_VERSION='4.3.46(1)-release' on a tab\_state file from Chrome 49.0.2623.105), it prints out the last URL first, between the URLs it removes any unprintable byte and all following bytes, and more if needed so at least 2 bytes are removed. Following each URL it prints a space, then the removed contiguous printable bytes if any, then a comma, then the number of other bytes removed (&said bytes within parentheses). To print the URLs only use the commented echo command instead.

```
tab_state=/data/data/com.android.chrome/app_tabs/0/tab_state
[[ $KSH_VERSION ]]||shopt -s extglob       #set if bash
(cat $tab_state;echo)|while read -r r;do b=
   while
      q=${r%http?(s)://*}          #chip off a URL
      [[ $q = *url= ]]&&{
         p=${r%http?(s)://*url=*}  #special case URL within URL
         [[ $p = "$r" ]]||q=$p;}
      h=${r:${#q}}                 #the chip
      h=${h%%[! -~]*}              #remove unprintable&following bytes
      u=$((${#r}-${#q}-${#h}))     #no of said bytes removed
      p=$((u<b?b-u:0))             #no of more bytes to remove
      [[ $h ]];do
         echo "${h::${#h}-p} ${h:${#h}-p},$u(${r:${#r}-u})"
      #  echo "${h::${#h}-p}"
         r=$q b=2
   done
done

```
> 2 votes

# Answer
In windows, to extract `tab_state0` from a TitaniumBackup archive (that works over rooted phones)

```
7z e TitaniumB\com.android.chrome-20180918-001302.tar.gz -so | 7z e -si -ttar tab_state0 -r

```

To get the list of tabs from `tab_state0`

```
sed -b "s/^.\{20\}//g" tab_state0 | sed -b "s/.\{6\}http/\nhttp/g" > my-tabs.md

```

---

On windows I would install https://scoop.sh/ then `scoop install busybox 7zip`
> 1 votes

# Answer
You can now bulk-save all open tabs as bookmarks, which sync way easier and allow other export means directly on a PC'S Chrome:

* Open Chrome on Android.
* To the right of the address bar, tap Switch tabs.
* Touch and hold any tab, or tap More and then Select tabs.
* Choose the tabs you want to bookmark.
* Tap More and then Bookmark tabs.

https://support.google.com/chrome/answer/2391819?co=GENIE.Platform%3DAndroid&oco=1#zippy=%2Cbookmark-tabs
> 0 votes

# Answer
Pitching in here that for those which run android with root, it is possible to export all of the chrome bookmarks via adb:

`# adb shell "su - -c cat /data/data/com.android.chrome/app_chrome/Default/Bookmarks"`

The bookmarks file is in plaintext JSON format, but is permissions protected by app userid, therefore root is required to read it.

it is handy if you do not sync chrome profiles across devices \ use google login with chrome.

the location is pretty standard to all androids, the Default should be recognizable to those who tinkered with it in the past.. it has the encrypted\* sqlite sessions and cookies stores.

in windows it's encrypted via DPAPI, but I have no idea about android..
> 0 votes

---
Tags: chrome-for-android
---


# Question
Title: Browser links opening in app instead of browser due to deep links
This is what I am facing right now. I have certain pages configured as Android app links in manifest file of my app. They work as expected when I search for those pages in Google and click on those links resulting in opening the corresponding app pages. My issue is when I am browsing the same pages on Chrome OS browser on my phone and try to navigate to the same links in the browser itself, they still open the app instead of navigating in the browser itself.

So for example if I have a Android app link in manifest file as scheme://host/path/ When I type this link in browser or open browser with scheme://host and navigate to path, it opens the app instead of keeping the user in the browser itself. How do I prevent user from opening the app when navigating in the browser itself?

# Answer
If you prefer remaining in browser rather than having corresponding app launched when a link is clicked, try changing settings here(opt out the apps to stop them from being launched)

> Here's how it can be done:

> Navigate to your phone Settings \> Apps and look for Default apps.

> Under Default apps settings, tap on the Opening links option.

> On the next page, disable the toggle for Open supported links.

Source
> 1 votes

---
Tags: browser, navigation
---


# Question
Title: My old Android 7 phone can't connect to my Hotspot
I've an old Android 7 phone that can connect to my home WiFi just fine, on 2.4 GHz and on 5 GHz. But if I start an hotspot on my Pixel 7, the old phone can't connect to it... But if I try to connect to my hotspot with another phone, it's working fine, so it's not the hotspot...

The old phone can see the network, but it alternate between connecting and saved... It can't connect...

I've tried to activate Extend compatibility, it doesn't change anything.

Do you have an idea what the problem could be?

# Answer
On Android 7 you may try changing the wifi encryption from WEP to WPA if available, which is supported by newer Pixel phones. WEP was found to have weakness and that's why newer phones like Pixel7 come with WPA encryption.
> -1 votes

---
Tags: wifi-hotspot
---


# Question
Title: Samsung tablet a8 screen touch unresponsive
I have samsung galaxy tab a8 still new and I faced an issue with the touch screen it's unresponsive totally, I tried to soft reset with pressing the power button and volume down till restart and the Samsung logo appears but still not working. Anyone knows what to do for it?

Thanks

# Answer
If the touch screen is not working, you can't use it you need to get it looked at.

If its new take it to Samsung under warranty.

It can be

1. Manufacturing fault
2. Digitizer for the screen has gone faulty
3. Drops or vibrations could have dislodged a connector
> 0 votes

---
Tags: touchscreen, samsung-galaxy-tab
---


# Question
Title: Can I emulate a Bluetooth keyboard with my Android device?
I'd like to use an Android phone for controlling presentations. I know there are some WiFi approaches, but often times the computer running the slideshow isn't owned by me and is not comfortable installing and running other software, especially stuff designed for remote control.

So I'm specifically looking for some way to do this using the Bluetooth HID profile, as it requires very little set-up on the PC side. Basically, I'm looking for the Android equivalent to BlueMaemo.

Is there a way to do this?

# Answer
Just saw this: AndroidSpin: Turn your Android Into a Keyboard and Mouse for Your Playstation 3 or PC

> Another reason we all love technology, thanks to some clever development by XDA member berserker\_devel, you can now use your rooted Android device as a keyboard or mouse on your Playstation 3. The app, BlueputDroid, has been released in beta form and allows your phone’s screen to be used as a cursor and virtual or physical keyboard to input text. This app could also be used for your PC, for those that really want the most from there device(s). Either way it could save you quite a bit of money on buying wireless input devices for your toys (provided they have bluetooth and are supported).

A limited number of devices are supported at present, but it's being actively developed, so something to keep an eye on even if it doesn't cover your device right now.
> 9 votes

# Answer
There's an app project on Google code that does this: AndroHID.

It doesn't offer you a full keyboard, it's meant more as a remote for wireless presenting or audio/video controls, etc. (much like older SonyEricsson feature phones, e.g. the K- or W-series did). You need root.

It seems inactive at the moment (last release from 2010) and it is not in the Play Store.
> 3 votes

# Answer
You could download TeamViewer for Android and then download TeamViewer Portable (scroll down some). This way, you could run TeamViewer from your USB drive without having to install it and then connect with TeamViewer for Android. I have used it to connect to my home computer and download some files - it works great on my EVO.

I couldn't wait to try it so I gave it a shot. It works pretty well but you can only access the main display (can't point things out with the mouse on a secondary display). Also, I needed to enable the "Presenter View" so that I could click the "Next" arrow since the presentation was on the secondary display. The computer I tried it on was on WiFi and my EVO was on 3G.
> 0 votes

# Answer
Native support for BT HID is going to appear in Android P.

> Android P adds support for the Bluetooth HID device profile, which allows Android smartphones to be used as a Bluetooth keyboard or mouse for connected devices.
> 0 votes

# Answer
The Bluetooth Keyboard & Mouse app emulates a real Bluetooth keyboard that you can connect with every device that accepts Bluetooth keyboard.

This is possible because, since Android 9, Bluetooth HID became available to apps.
> 0 votes

---
Tags: bluetooth, keyboard, emulators
---


# Question
Title: `adb reboot -p` usually reboots instead of power-down which it is supposed to
When writing:

```
adb reboot -p

```

I expect the unit to power down indefinitely. Instead, it just reboots automatically, the same as having written:

```
adb reboot

```

only.

Why is that? What should I write?

# Answer
Many phones start booting when a power cable is attached. This could be the reason here for the phone rebooting instantly instead of staying off.
> 2 votes

# Answer
This should work

```
adb shell reboot -p

```
> 1 votes

---
Tags: adb, reboot
---


# Question
Title: Android-to-Android file explorer using WiFi direct
Is there a way to access files of an Android device from another Android device using Wi-Fi? I need something like a file explorer.

# Answer
Generally, any good file explorer with FTP, SFTP, WebDAV, and SMB/CIFS capabilities can handle this task with ease or other Wi-Fi file-sharing applications. You can even browse through Play Store to get the right one, e.g. Solid Explorer, Total Commander etc. For starters, you can run through Izzy's list of **Filetransfer between two Android devices**.

For purposes of explanation, I chose ES Explorer, it has a lot of functions including **remote browser**:

**You can use the following procedure to access files in another device:**

1. Install ES Explorer on both devices if you haven't already done so.
2. Switch on a portable hotspot and allow both devices to connect.
3. Using phone A, open ES Explorer and go to remote manager and turn it on. See below:

(click image for larger variant)
4. Copy the server details from phone A, you will need them in phone B.
5. Using phone B, open ES Explorer and navigate to Network → FTP.
6. Add a new server using the details you previously copied:
7. When setup is completed, you can now browse the files of phone A from phone B.

See screens from both devices:

(click images for larger variants)
> 1 votes

# Answer
I searched for an app to transfer files from/to the laptop completely locally (= securely) without cable and without additional software (on the PC) and found nothing. So I developed an app myself "wimly" (for Android).

It's completely free without ads.
> 1 votes

# Answer
The best app I've found is X-plore File Manager. It has a WiFi file server and can browse the SD card and internal card of another phone on the same WiFi. The best part is it works both on someone's hotspot and if *you* are the hotspot as well.
> 0 votes

# Answer
Looking for a WiFi Direct emulator, I visited this YouTube video.

Connect two Android devices without a router via Wifi Direct.

From Wi-Fi peer-to-peer overview | Android Developers,

> Wi-Fi peer-to-peer (P2P) allows Android 4.0 (API level 14) or later devices with the appropriate hardware to connect directly to each other via Wi-Fi without an intermediate access point (Android's Wi-Fi P2P framework complies with the Wi-Fi Alliance's Wi-Fi Direct™ certification program).

I watched the above video to reproduce the steps. Unfortunately, my 4.2.2 Android tablet shows no menu item for WiFi Direct. Asked my friend to check and his Samsung smartphone Android 5.0 shows a router option and none for WiFi Direct. All I can select from my tablet's Settings/WiFi/other is Hotspot for Internet access sharing/tethering.

My interest is to stream videos from one Android Tablet to another Android Tablet over WiFi Direct. WiFi Direct specification and manual are about 180 pages long. Not sure how to enable WiFi Direct on my tablet.

Anyway, I can still connect from my tablet to P2P (WiFi Direct) camera to watch live video feeds. So if both of your Android devices support WiFi Direct connection, the above video comes with a solution to your question.
> 0 votes

---
Tags: file-transfer, file-management, wifi-direct
---


title: Test for ARM32 compatibility

text:
# Question
Title: Test for ARM32 compatibility
I'm trying to programmatically test if a phone supports 32-bit binaries. The command

```
adb shell getprop ro.product.cpu.abilist | grep armeabi

```

seems like it should work. However, are there other ABI names I need to test for?

(Note: I do know that `abilist` is unavailable prior to Lollipop and that `abi` should be used instead in such a case.)

# Answer
The list of current ABIs is available in the NDK documentation. The 32-bit ARM ABI you should look for on modern devices is armeabi-v7a.
> 1 votes

---
Tags: arm-processors
---


# Question
Title: How to add missing mobile hotspot quick setting toggle on MIUI second space?
Recently I noticed the second space in MIUI has been stripped of several handy settings and shortcuts, which is a back draw on an otherwise good feature.

I am looking for a way to add missing shortcuts on quick setting panel (without necessarily installing 3rd party application(s)). I already have a shortcut to the required setting i.e mobile hotspot, but I prefer a quick setting tile.

I want to achieve something similar to this: How to Restore the Mobile Data and Mobile Hotspot Quick Settings Toggles on Samsung Galaxy Devices but in this case for MIUI second space.

Note: `settings get secure sysui_qs_tiles` already has entry for hotspot tile, but it just doesn't appear in second space.

*Automation solution is appreciated but should be toggle option on quick settings*

The device is rooted, running on Android 9 miui.

# Answer
> 1 votes
I solved it using an app that enables Wi-Fi directly from the second space. I use "Mobile Hotspot". However, surely the programming expert knows how to display the native tool in the second space just using an editor like Setedit. I would also like to know how..

---
Tags: miui, quick-settings
---


title: How to move phone contacts to Google?

text:
# Question
Title: How to move phone contacts to Google?
I'm using the Samsung Vibrant, T-Mobile's variant of the Galaxy S, running Android 2.1. When I create a contact on my Android phone, I can choose to store it to the SIM, the phone, or to Google. If I choose phone, is there an easy way that I can move or copy that contact to Google (so it shows up in Gmail, for example) at some later time?

The edit menu for contacts shows options for *Edit*, *Delete*, *Link contact*, *Mark as default*, *Send namecard via* and *Copy to SIM*.

# Answer
vCardIO works on any Android device and can import-export any vCard 2.1 format, even those with multiple contacts.
> 8 votes

# Answer
This is the simplest way that I found to do it with my Samsung Galaxy S:

1. From the main Contacts screen, hit *Menu*, then *More*, then *Import/Export*, then *Export to SD card*.
2. Connect the phone to the PC and mount the phone's SD card as a removable drive.
3. Open browser to GMail, select *Contacts* then *Import*. Select the file on the phone's SD card, then *Import*.

Voila! On the next sync, they're back as my phone as Google contacts.
> 38 votes

# Answer
### This is how I did it (I have a Samsung GT-S6102 with Android 2.3.6)

1. Go to the contact list.
2. Press the menu button \[=\] in the bottom left corner of the phone.
3. Choose Import/Export.
4. Choose Export to SD Card (remember the name & place of the VCF file).
5. Go to "My files".
6. Find the file `xxxx.vcf` file.
7. Long push on it.
8. Choose Share.
9. Choose Gmail.
10. Send it to your own email address.
11. On your PC, open your email in Gmail.
12. Find the attachment and choose "import to contacts"
13. Google will now guide you through the merging process.
14. You may want to delete the VCF file from the phone's SD card afterward.

### Afterwards, I hid all contacts but Google contacts

1. Go into contacts
2. Press the menu button \[=\] in the bottom left corner of the phone.
3. Choose More.
4. Choose Display Options.
5. Use the settings under "Select contacts to display".
> 12 votes

# Answer
Simple on Galaxy devices (and prob more)

1. Goto your Contacts main list.
2. Press the Menu soft key.
3. Select Merge Accounts.
4. Select Merge with Google.
5. All Device contacts will be merged with Google Account.
> 7 votes

# Answer
This works on a HTC Hero 2.1: Open the standard "Contacts" app, in the first screen where all contacts are shown press the menu button, choose "Import/Export" and the option "Import from SIM card".
> 5 votes

# Answer
A way I just did it as most of these options weren't available (transferring phone to phone)

1. Filter contacts by device only
2. Select all contacts
3. Share contacts to email or however you feel is necessary, I emailed to myself
4. On the new phone, download the contacts from the email
5. I got the option on import to save contacts to Google, which I will be adding a new contact to from now on
> 1 votes

# Answer
I recommend Contacts Optimizer (it's free) and you can remove duplicates, move contacts between accounts, mass remove contacts.
> 0 votes

# Answer
The easiest solution might be to use the "back up & sync device contacts" option as described in Back up & sync device contacts, this appears to work even if you don't have the latest Google Contacts app installed:

1. Open your device settings
2. Tap "Google" \> "Settings for Google apps" \> "Google Contacts sync"
This shows you how many Google contacts have already been synchronized, and how many phone contacts there are
3. Tap "Also sync device contacts" \> "Automatically back up & sync device contacts"
4. Turn on "Automatically back up & sync device contacts"

After a short moment, you can open your Contacts app and should see that the contacts appear under your Google account.

---

If you are using the Google Contacts app, you can alternatively also move individual contacts from the phone to your Google Account as described in Add, move, or import contacts.

---

Another option is to export all contacts, for example as a vCard file (`*.vcf`), and then re-import them again to your Google account.

See How to migrate all of your Android contacts to Google | TechRepublic. Though I am not sure how reliable that is and if all information of your contacts can be properly preserved this way.
> 0 votes

# Answer
To make these sort of changes I use MyPhoneExplorer

You install an app on the phone and one on Windows. From Windows you can suck in contacts, files, messages etc (for backup). But you can also edit the contacts. See screenshot, you can just change the account. And then sync the changes back.
> 0 votes

---
Tags: contacts, 2.1-eclair, google-contacts
---


# Question
Title: On an Android device, can I plug a wired microphone and output to bluetooth speakers at the same time
It seems like if my Android phone is connected to a bluetooth speaker and then I plug in a wired microphone through the headphone jack, the bluetooth speaker stops working.

Is there any way to maintain a bluetooth speaker output and yet have functionality from a wired microphone?

I tried a pass-through app called "Mic To Speaker". That works with the phone's on-board microphone in that I can talk into it and the bluetooth speaker will output my voice. However, as soon as I plug in a wired microphone, the bluetooth speaker output stops.

# Answer
> 0 votes
> However, as soon as I plug in a wired microphone, the bluetooth speaker output stops.

Try changing the output audio path - After connecting to both Bluetooth speaker and wired microphone, locate an UI called Media output then switch it to your Bluetooth speaker. I've attached screenshots I took from an Android 14 device which might look different from yours depending on version of Android.

---
Tags: bluetooth, audio, bluetooth-audio, microphone
---


# Question
Title: How to export bookmarks from Chrome in Android?
I need to import bookmarks from my Chrome Android mobile. Is there any direct way to do it? Please do not suggest to sync Chrome account in desktop and do import from there, my Sync rights has been disabled by admin in Chrome desktop.

# Answer
> 1 votes
Nowadays (2023), for this question, one can try my Xposed module ChromeXt, which is an active open source project. From its README: Bookmarks can be exported in HTML format through the `Developer options` menu.

There is also a dicussion about this function, which might be helpful for you.

# Answer
> 0 votes
Google offers downloading your data from the Google products you use. If Chrome's data was synced on Android side, you could download from here.

# Answer
> -1 votes
Google Bookmark Import Tool helps in cases when you need to backup Chrome Android bookmarks.

It is simple to use and generated file can be transferred from phone/tablet easily.

---
Tags: 4.4-kitkat, chrome-for-android
---


# Question
Title: Oppo Reno5 4G bootloop after installing an update
My phone is Oppo Reno5 4G. The phone unfortunately goes into a bootloop after installing an update. The problem is I can't enter recovery mode.

I tried different combinations and nothing worked (hold the power button and volume up (it just forced restart, I think). I tried the power button and volume down, but it didn't work. I also tried pressing all the buttons, and it also didn't work.

I've searched online and it says that you need to press the power button and volume down to go to recovery mode, but it's not working for me. I've tried different software, but nothing worked. And unfortunately, it seems like my USB debugging is deactivated, though I have no means of confirming this. I've tried connecting to PC and holding the power button and volume up and it would go blackout and the PC seems able to recognize it.

I've done a lot of research but nothing seems to be working. If anyone knows how to fix this, I would appreciate it, or even just help me if there's a PC software that can fix this.

# Answer
Its not obvious that you have done this.

You need to power off the phone first. Then hold the volume up and then hold power button. Release after you see the logo.

If that doesn't work, repeat with vol down.
> 0 votes

---
Tags: boot-loop, oppo
---


# Question
Title: Samsung Galaxy A32 stuck at 'Phone is starting..."
My Samsung Galaxy A32 restarted itself and now is stuck at this 'Phone is starting...'.

I googled ways to resolve this but none work, The last option\resort is to factory wipe, but I have images on here that I have not yet copied to the SD card or cloud stuff setup (yes, I know I should).

I tried to see if I could see the data via the ADB debugging option but it's all 'empty', I suppose it's not allowing me to view it until it 'loads'?

I tried the wipe cache partition, restarting multiple times, turning off and waiting then powering back on, and rebooting in safe mode, somewhere mentioned to turn battery saver mode off but it was already off + the toggle didn't work but I managed to get to it via the Settings menu (the only thing I can access) and thought I'll turn it on then off... now it won't turn off, entering the 'download mode', then exit and reboot.

Anything else I can try, all these applications to download to repair the phone seem dodgy or not what I need. I thought about downloading Odin and the firmware from somewhere to reinstall, but that would wipe all my data right? What about rooting it would that give me any functionality to access the data? Can I even root it if I can't install apps?

# Answer
> 0 votes
I faced the same issue with my A32 (SM-A325F - Android 13) cca. two weeks ago. The phone restarted unintentionally and after the restart it stuck at "Phone is restarting" stage.

I tried the stuff you mentioned and I also performed reinstallation of the latest firmware using Odin. (btw if you upload CSC file "HOME\_CSC....." then you will not lose your data). Unfortunatelly firmware reinstallation with "HOME\_CSC..." did not solve the issue.

I investigated the rooting option but it will erase your data when unlocking the bootloader by OEM Unlock in the development menu.

If you have a possibility to boot into Safe Mode and switch off the Power Saving it may solve the issue. It didn't work for me.

---
Tags: samsung, boot
---


# Question
Title: How can I `adb pull` a large file when the USB connection breaks continuously?
I want to transfer a large file with `adb pull`, but my USB connection disconnects all the time, interrupting the transfer. How can I make this work?

# Answer
> 3 votes
Here's a Python 3 script that implements a workaround based on `adb` and `dd`. It continuously retries and resumes downloads when disconnection happens.

```
#!/usr/bin/env python3

# adb-repull.py
#
# ADB pull emulation for machines with problematic USB ports/cables.
# It continuously retries and resumes download when disconnection happens.
#
# Copyright (c) 2018 Alexander Lopatin
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

import errno
import math
import os
import subprocess
import sys
import time

BUFFER_SIZE = 8192
SLEEP_TIMEOUT = 5

def run_with_retries(function):
    while True:
        try:
            return function()
        except ConnectionError as e:
            print(e)
            print('Retrying after {} seconds'.format(SLEEP_TIMEOUT))
            time.sleep(SLEEP_TIMEOUT)

def size_to_blocks(size):
    return math.ceil(size / BUFFER_SIZE)

def get_size(remote_file):
    print('Getting size of {}'.format(remote_file))
    with subprocess.Popen(['adb', 'shell', 'du', '-b', remote_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) as process:
        out, err = process.communicate()

        if len(err) > 0:
            raise ConnectionError('Disconnected')

        size_and_remote_file = out.decode('utf-8').split()
        if len(size_and_remote_file) > 0:
            return int(size_and_remote_file[0])
        else:
            raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), remote_file)

def is_execout_supported():
    print('Checking if exec-out is supported')
    with subprocess.Popen(['adb', 'exec-out', 'echo'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) as process:
        out, err = process.communicate()

        if len(err) > 0 and err.decode('utf-8').strip() != 'error: closed':
            raise ConnectionError('Disconnected')

        result = process.returncode == 0
        print('Yes' if result else 'No')
        return result

def get_size_with_retries(remote_file):
    return run_with_retries(lambda: get_size(remote_file))

def is_execout_supported_with_retries():
    return run_with_retries(is_execout_supported)

def update_progress(remote_file, current_block, last_block, speed):
    if current_block % 1000 == 0 or current_block == last_block:
        progress = (current_block / last_block) * 100.0
        speed_in_mib = speed / (1024 * 1024)
        print('Downloading {} {:.1f}% ({:.1f} MiB/s)'.format(remote_file, progress, speed_in_mib))

def pull(remote_file, local_file, remote_size, execout, output):
    print('Downloading {}'.format(remote_file))

    last_block = size_to_blocks(remote_size)
    local_size = os.path.getsize(local_file)
    current_block = size_to_blocks(local_size)

    time_elapsed = 0
    bytes_downloaded = 0

    dd_command = "dd if={} bs={} skip={} 2>>/dev/null".format(remote_file, BUFFER_SIZE, current_block)
    command = ['adb', 'exec-out', dd_command] if execout else ['adb', 'shell', 'busybox stty raw ; {}'.format(dd_command)]

    with subprocess.Popen(command, stdout=subprocess.PIPE) as process:
        while current_block < last_block:
            time_start = time.time()

            current_block += 1
            expected_buffer_size = remote_size - local_size if current_block == last_block else BUFFER_SIZE

            buffer = process.stdout.read(expected_buffer_size)
            buffer_size = len(buffer)

            if buffer_size != expected_buffer_size:
                raise ConnectionError('Wrong buffer size {}. Disconnected'.format(buffer_size))

            output.write(buffer)
            local_size += buffer_size

            time_end = time.time()
            time_elapsed += time_end - time_start

            bytes_downloaded += buffer_size
            speed = bytes_downloaded / time_elapsed
            update_progress(remote_file, current_block, last_block, speed)
        print('Done')

def pull_with_retries(remote_file, local_file):
    remote_size = get_size_with_retries(remote_file)
    execout = is_execout_supported_with_retries()

    with open(local_file, 'a+b') as output:
        output.seek(os.SEEK_END)
        run_with_retries(lambda: pull(remote_file, local_file, remote_size, execout, output))

def main(argv):
    if len(argv) < 2:
        print('Usage: %s /mnt/sdcard/remote.bin [local.bin]' % argv[0])
    else:
        try:
            if sys.platform != 'linux':
                raise OSError('Unsupported platform')
            remote_file = argv[1]
            local_file = os.path.basename(remote_file) if len(argv) < 3 else argv[2]
            pull_with_retries(remote_file, local_file)
        except OSError as e:
            print(e)

main(sys.argv)

```

For me, the performance is the same as `adb pull`. If you experience problems with performance—try to play with `BUFFER_SIZE` value.

# Answer
> 0 votes
ADB can not pull files partially or resume. Also modifying the PC side of ADB is AFAIK of no use to you, as the provided functionality is provided by the on-device part (which you can't replace).

From my point of view there are two possibilities left:

1. Install an FTP server (app) that allows to automatically start with Android and that is able resume the download. Let is share a directory, the file you want to get is located in, or use your 20 seconds time window to move the file into the FTP shared directory.
2. Another option would be a cloud synchronization app (or command-line tool you could call via adb) that is able to push files automatically block-wise to the server (like the DropBox desktop client does). Unfortunately AFAIK the official Android DropBox client works differently and is of no use for you in this scenario. But some 3rd party Dropbox app or a different cloud sync app may be usable.

# Answer
> 0 votes
You have a few options here if your connection keeps breaking.

1. Use the script by alopatindev to resume using `dd` command.
2. Use Wireless ADB over Wi-Fi. The connection may be slightly slower. This is easier, but will also stop when disconnected from WiFi because it is the same as ADB. Go to developer options, enable Wireless Debugging, then tap on the words/arrow "Wireless Debugging". Now you can start ADB wirelessly. Look at your IP and port, and enter them with `adb connect IP:port`
3. Install RSync in Termux (Fdroid). RSync has a resume option. You will need to be able to start the SSH server on one of the devices (either with `systemd` on the computer, or running `sshd` directly on Termux), with RSync on both devices. You can do this on Windows using WSL, but the WSL network is quite slow.

---
Tags: adb, usb
---