Интеграция Android Wear OS c мобильным устройством на Android

Задача: создать прототип приложения, которое позволяло бы получать частоту сердцебиения с часов на Wear OS и передавать эти данные на смартфон под управлением Android.

Подготовительные работы:

  1. Создать эмулятор с предустановленными Google Play сервисами
  2. Установить на эмулятор приложение из Google Play Wear OS (и с не официальных источников https://apkpure.com/wear-os-by-google-smartwatch/com.google.android.wearable.app/download)
  3. Создать эмулятор для Wear OS (у меня в примере использовался API 30)
  4. Выполнить сопряжение, используя следующую статью https://developer.android.com/training/wearables/get-started/connect-phone

Результат: будут созданы два приложения, один для часов, другой для смартфона и при этом из package name должен быть одинаковым. А судя из статьи https://stackoverflow.com/questions/48921165/syncing-data-items-between-mobile-device-and-wear ещё и подписи.

Читать далее «Интеграция Android Wear OS c мобильным устройством на Android»

Набранный текст Android edittext не отображается

Я знаю, что видел этот вопрос уже тысячу раз, но не нашел ответа, который сработал. В моем приложении у меня есть поле Edittext. Когда я запускаю приложение на эмуляторе или на своем телефоне, при вводе текста редактирования текст не отображается. Курсор перемещается, и я могу получить введенное значение, просто при вводе ничего не отображается. Я пытался изменить цвет текста, цвет фона и любое другое решение, с которым я сталкивался, но ничего не сработало.

Решение: удалите строку из файла манифеста android:hardwareAccelerated="false"

Подключение к ADB через Wi-Fi (через TCP)

ADB умеет подключаться к устройствам не только через USB, но и через TCP. Порой, это бывает весьма полезным.

1. Подключаем устройство через USB, а в консоль вводим команду adb tcpip 5555. В ответ будет выведена фраза «restarting in TCP mode port: 5555».
2. Отключаем устройство от USB, в консоль вводим команду adb connect <ip>:<port>, где <ip> — это адрес устройства, а <port>  в нашем случае — 5555. В ответ должна появится фраза «connected to 192.168.1.10:5555».

Во многих случаях достаточно выполнить лишь пункт 2 (т.е. бе предварительного подключения устройства по USB).

Проверяем, что устройство видно:

# adb devices
List of devices attached
192.168.1.10:5555 device

Соединение по TCP автоматически завершится в тот момент, когда вы подключите это устройство через USB. Также можно вручную указать ADB слушать только USB:

# adb usb

ViewModel в Java

Примечание: сразу уточню, что ViewModel — это не замена onSaveInstanceState(Bundle)

Ниже код ViewModel

package ag.krasnov.exampleviewmodel;

import android.util.Log;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {

    private int mCount;


    public int getCount() {
        return mCount;
    }

    public void increment() {
        mCount++;
    }
}
Читать далее «ViewModel в Java»

Вывод собственного меню в фрагменте

You need to use menu.clear() before inflating menus.

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        inflater.inflate(R.menu.menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

and

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

How to add Options Menu to Fragment in Android — Stack Overflow

Деобфускация кода exception в Firebase Crashlytics после падения приложения

Чтобы сделать код исключений в Firebase Crashlytics более читабельным все что нужно — это добавить эти три строчки в файл proguard-rules.pro:

-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
Читать далее «Деобфускация кода exception в Firebase Crashlytics после падения приложения»

Java Decompiler

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

JD-Eclipse is a plug-in for the Eclipse platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all.

JD-Core is a library that reconstructs Java source code from one or more “.class” files. JD-Core may be used to recover lost source code and explore the source of Java runtime libraries. New features of Java 5, such as annotations, generics or type “enum”, are supported. JD-GUI and JD-Eclipse include JD-Core library.

JD-Core, JD-GUI & JD-Eclipse are open source projects released under the GPLv3 License.

Java Decompiler (java-decompiler.github.io)

Android. Добавление надписи и метаданных к фото.

Следующий метод нарисует на фото текущую дату и время в нижнем правом углу:

public static Bitmap signBitmap(Bitmap background) {
    background = background.copy(Bitmap.Config.ARGB_8888, true);
    Paint paint = new Paint();
    paint.setColor(Color.YELLOW);
    paint.setTextSize(18f);
    Date date = new Date();
    String dateString = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.getDefault()).format(date);
    Canvas canvas = new Canvas(background);
    canvas.drawText(dateString, background.getWidth() - 180, background.getHeight() - 40, paint);
    return background;
}
Читать далее «Android. Добавление надписи и метаданных к фото.»