Total de visualizações de página

Debug Wireless : Android Studio

Saudações pessoal,

Nas minha andança pelo mundo de desenvolvimento android deparei-me com uma situação.

Estando eu a programar e testando um aplicativo via USB surge o meu irmão que pede o cabo com urgência porque precisava tirar uma informação do telefone e este estava quase a desligar. Tive de entregar.

Surgiu-me então a pergunta: Será que posso fazer o debug por uma conexão wireless ?

Comecei a busca e encontrei em poucos passos como fazer. Segue a baixo:

Passo 1:

Habilite a opção de desenvolvedor em seu aparelho, para tal vá em "Configurações > Sobre o telefone > Status do telefone" no final da tela esta a opção "Número da versão", clique sobre ela 10 vezes e mostrará a mensagem que é um desenvolvedor.


Passo 2:
Terá inicialmente de fazer com que o seu aparelho android escute a porta 5555 pelo seguinte comando (Conecte o aparelho via USB):
$ adb tcpip 5555 
 

 Este passo é feito apenas uma vez.

Passo 3:

Agora pode desligar o cabo usb, ligar o PC e o aparelho na mesma rede wi-fi (tenha atenção com o proxy e firewall)

Abra o terminal e vá até a pasta do SDK:

 C:\Users\username\AppData\Local\Android\Sdk\platform-tools>

Execute o comando:

adb.exe connect 10.5.1.17:5555


Para ver a lista de dispositivos conectados digite o comando "adb.exe devices"



Já está, pode continuar a desenvolver e aqora testando usando uma conexão wireless.

Espero ter ajudado.

Deixa o teu comentário.

Fonte: https://developer.android.com/studio/command-line/adb.html#wireless


Persistencia de Dados Android - ROOM - Parte 2

Saudações pessoal,

Hoje vou mostrar o código completo de suporte ao post  Persistencia de Dados Android - ROOM

Fiz um código auto-explicativo por ser complemento do post passado.

Como é possível ver na imagem não foram feitas alterações no manifeste.


No Gradle (Module) foi adicionado as linhas
// Roomimplementation "android.arch.persistence.room:runtime:1.0.0"annotationProcessor "android.arch.persistence.room:compiler:1.0.0"



Estrutura de pastas: Dentro de model temos 3 classe Person, AppDatabase e PersonDao

Person é a nossa entidade
PersonDao é a interfaces que vai permitir usar os métodos relacionados a person.
AppDatabase é a classe abstrata que nos permite a conexão directa com o SQLite.

 Na pasta "ui" temos apenas a MainActivity onde faremos uma boa parte do trabalho.

Vamos ao código

Person.java
@Entity(tableName = "person")
public class Person {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private int id;
    @ColumnInfo(name = "name")
    private String name;
    public int getId() {
        return id;    }

    public void setId(int id) {
        this.id = id;    }

    public String getName() {
        return name;    }

    public void setName(String name) {
        this.name = name;    }

    @Override    public String toString() {
        // Usei a ajuda do toString para mostrar os dados porque o foco não era adapter        return getId()+" - "+getName();    }
}


PersonDao.java
@Daopublic interface  PersonDao {

    @Query("SELECT * FROM person")
    List<Person> loadAll();
    // metodo nao usado mas coloquei para ilucidar como pode ser criado    @Query("SELECT * FROM person WHERE id IN (:ids)")
    List<Person> loadAllByPersonId(int... ids);
    // metodo nao usado mas coloquei para ilucidar como pode ser criado    @Query("SELECT * FROM person where name LIKE :name  LIMIT 1")
    Person loadPersonByName(String name);
    // metodo nao usado mas coloquei para ilucidar como pode ser criado    @Insert    void insertAll(Person... person);
    @Insert    void insert(Person person);
    @Update    void update(Person person);
    @Delete    void delete(Person person);

}


AppDatabase.java
@Database(entities = {Person.class},version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
    public abstract PersonDao personDao();}


MainActivity.java
package ao.co.a2xevolution.persistenciaandroidroom.ui;
import android.arch.persistence.room.Room;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;
import java.util.List;
import ao.co.a2xevolution.persistenciaandroidroom.R;import ao.co.a2xevolution.persistenciaandroidroom.model.AppDatabase;import ao.co.a2xevolution.persistenciaandroidroom.model.Person;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText txtName;    private Button btnSave;    private ListView lstPerson;    private AppDatabase db;
    private List<Person> people;    private ArrayAdapter<Person> adapter;    private Person person;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);
        person = new Person();
        txtName = (EditText) findViewById(R.id.txtName);        btnSave = (Button) findViewById(R.id.btnSave);        btnSave.setOnClickListener(this);        lstPerson = (ListView) findViewById(R.id.lstPerson);
        lstPerson.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                delete(position);                listAll();                return true;            }
        });
        lstPerson.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                person = people.get(position);                txtName.setText(person.getName());            }
        });
        // Usei a ajuda do toString para mostrar os dados porque o foco não era adapter        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);        lstPerson.setAdapter(adapter);
        db = Room
                .databaseBuilder(getApplicationContext(), AppDatabase.class, "Exemplo-cda")
                .allowMainThreadQueries() // não usar esta linha na UI Principal                .build();        listAll();    }

    @Override    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSave:
                if (person.getId() < 1) {
                    person.setName(txtName.getText().toString());                    insert();                    listAll();                    txtName.setText("");                } else {
                    person.setName(txtName.getText().toString());                    update();                    listAll();                    txtName.setText("");                }
                break;
        }
    }

    private void insert(){
        db.personDao().insert(person);        person = new Person();    }

    private void update() {
        db.personDao().update(person);        person = new Person();    }

    private void delete(int position) {
        db.personDao().delete(people.get(position));    }

    private void listAll() {
        people = db.personDao().loadAll();        adapter.clear();        adapter.addAll(people);    }

}


activity_main.xml
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="ao.co.a2xevolution.persistenciaandroidroom.ui.MainActivity">

    <EditText        android:id="@+id/txtName"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginEnd="8dp"        android:layout_marginStart="8dp"        android:layout_marginTop="8dp"        android:ems="10"        android:inputType="textPersonName"        android:hint="Name"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />
    <Button        android:id="@+id/btnSave"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginBottom="8dp"        android:layout_marginEnd="8dp"        android:layout_marginStart="8dp"        android:layout_marginTop="8dp"        android:text="Save"        app:layout_constraintBottom_toTopOf="@+id/lstPerson"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintHorizontal_bias="1.0"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/txtName" />
    <ListView        android:id="@+id/lstPerson"        android:layout_width="368dp"        android:layout_height="385dp"        android:layout_marginBottom="8dp"        android:layout_marginEnd="8dp"        android:layout_marginStart="8dp"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent" /></android.support.constraint.ConstraintLayout>





Espero ter ajudado com este post.

Se foi util para ti deixa um (y) comentario ou faça algum outro gesto para que eu saiba.

Bons estudos.

Link IQ Option







Persistencia de Dados Android - ROOM

Saudações pessoal, 

Tal como em outras linguagens o android também tem formas de persistência de dados.
Existem 4 metodos que passo a descrever: 

  • SharedPreferences: Armazenar dados particulares primitivos em pares chave-valor.
  • Internal Storage: Armazenar dados privados na memória do dispositivo. ( com persistência de objetos )
  • External Storage: Armazenar dados públicos sobre o armazenamento externo compartilhado.
  • SQLite Databases: Armazenar dados estruturados em um banco de dados privado.
Para esta secção vamos focar no SQLite Database.
Durante algum tempo usar "SQLite Database" cru ou uma api de terceiros foi a opção e em minha opinião trabalhosa.

Recentemente foi disponibilizada para a nossa alegria o ROOM  PERSISTENCE LIBRARY.

 O Room fornece uma camada de abstração sobre o SQLite para permitir o acesso fluente de banco de dados enquanto aproveita todo o poder do SQLite.

O que traz de bom? 
Trabalhar com o ROOM é extremamente fácil.  
Existem 3 componentes para facilitar o nosso trabalho.

Database: A classe que representa a base de dados.
Entity: Representa a tabela na base de dados.
DAO: contem os metodos para acesso a base de dados. 

Exemplo pratico:
Adicionar as dependências ao projecto.

    // Room
    implementation "android.arch.persistence.room:runtime:1.0.0"
    annotationProcessor "android.arch.persistence.room:compiler:1.0.0"

 Codificar:

User.java

@Entity
public class User {
    @PrimaryKey
    private int uid;

    @ColumnInfo(name = "first_name")
    private String firstName;

    @ColumnInfo(name = "last_name")
    private String lastName;

    // Getters and setters are ignored for brevity,
    // but they're required for Room to work.
}

UserDao.java

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND "
           + "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}
 
 AppDatabase.java

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}


AppDatabase db = Room.databaseBuilder(getApplicationContext(),
        AppDatabase.class, "database-name").build();
 Espero que tires proveito das informações encontradas aqui e não esqueça de consultar sempre o site do Desenvolvedor Android







Como Começar a desenvolver para Android

Saudações pessoal,

Hoje pretendo ajudar o pessoal que deseja ser desenvolvedor Android a dar os primeiros passos.

Vou assumir que já tem conhecimento de uma outra linguagem de programação.

Algumas perguntas passam pela cabeça das pessoas que desejam sair de linguagens web para mobile:

- O que é necessário para começar?
- Onde começar ?
- Onde encontrar apoio ?

Antes de tudo devemos procurar o site oficial para desenvolvimento android para obter toda informação necessária .

- Mas o Site esta em inglês.

Para os desenvolvedores não há muitas saídas quando a língua nativa não é o inglês, eu aconselho a todo desenvolvedor a compreender ao menos 2 línguas.

Mas também poderá contar com o apoio das comunidades de desenvolvimento dos países de Língua oficial Portuguesa. Em Angola pode Juntar-se ao Coding Dojo Angola.

OK, no site oficial do android poderá encontrar toda a informação necessária.

Comece por estudar como funciona o desenvolvimento Android.

1. Design
    * Conheça as guidelines para construção de um app.
    * Crie as suas telas baseadas nestas guidelines tendo como foco como tornar a interação com o utilizador a mais agradável possível.

2. Codificação
    * Com o ambiente de desenvolvimento todo configurado é chegado o tempo de codificar as ideias.
    * A documentação da API por ser facilmente encontrada no próprio site do android.

3. Publicação e Distribuição.
    * O android tem a Playstore que é o local onde oficialmente são colocados os APK's dos app's.
    * Para ter acesso a consola de desenvolvedor android é necessário fazer um pagamento (OBS: pagamento único) de 25 USD.

Agora já sabes como começar e onde encontrar apoio.

Desejo a si sucesso nesta nova jornada.


Fonte: https://developer.android.com/







Comandos para conectar automaticamente o firebase com o flutter.

     dart pub global activate flutterfire_cli\n    export PATH="$PATH":"$HOME/.pub-cache/bin"\n    flutterfire configu...