Aula android 03

Preview:

DESCRIPTION

Aula 3 de android

Citation preview

AndroidDesenvolvimento

sábado, 27 de outubro de 12

Desenvolvedor de softwarewww.carloscavalcanti.com

twitter @carloscaval

contato@carloscavalcanti.com

github.com/carloscavalcanti

sábado, 27 de outubro de 12

Banco de dados

Google Maps

SMS

Review

sábado, 27 de outubro de 12

Banco de dados

Google Maps

SMS

Review

sábado, 27 de outubro de 12

Banco de dados

Google Maps

SMS

Review

sábado, 27 de outubro de 12

Banco de dados

Google Maps

SMS

Review

sábado, 27 de outubro de 12

Banco de dados

Google Maps

SMS

Review

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

ReviewActivity

sábado, 27 de outubro de 12

ReviewActivity

sábado, 27 de outubro de 12

ReviewActivity

sábado, 27 de outubro de 12

ReviewActivity

sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review

Ciclo de vida

sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review

AndroidManifest.xmlsábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review

//Criando uma intent, onde iremos dizer para onde essa "intenção" irá.Intent it = new Intent(ClassActivityCorrente.this, OutraTelaActivity.class);

27//Funcão para dar inicio a intent.

28startActivity(it);

Intent

sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.exemploandroid" android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".NovaActivity"/> </application>

</manifest>sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review

Passar informações entre activitys

putExtra()

get?Extra()sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review

BroadcastReceiver

sábado, 27 de outubro de 12

Review

BroadcastReceiver

Notification

sábado, 27 de outubro de 12

Review

BroadcastReceiver

Notification

Service

sábado, 27 de outubro de 12

Review

sábado, 27 de outubro de 12

Review

AbsoluteLayout

sábado, 27 de outubro de 12

Review

AbsoluteLayout

FrameLayout

sábado, 27 de outubro de 12

Review

AbsoluteLayout

FrameLayout

TableLayout

sábado, 27 de outubro de 12

Review

AbsoluteLayout

FrameLayout

TableLayout

RelativeLayout

sábado, 27 de outubro de 12

Google Maps

sábado, 27 de outubro de 12

Primeiro passo

sábado, 27 de outubro de 12

Primeiro passo

sábado, 27 de outubro de 12

Primeiro passo

sábado, 27 de outubro de 12

Primeiro passo

sábado, 27 de outubro de 12

Se o projeto estiver criado?

sábado, 27 de outubro de 12

Se o projeto estiver criado?

sábado, 27 de outubro de 12

Se o projeto estiver criado?

sábado, 27 de outubro de 12

Utilizar a library

<uses-library android:name="com.google.android.maps"/>

Adicionar no manifest

Dentro da tag <application>

sábado, 27 de outubro de 12

Permissão no manifest

GPS e Internet

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.INTERNET"/>

sábado, 27 de outubro de 12

Chave de acesso

Para se trabalhar com o Google maps é necessário

obter uma chave

sábado, 27 de outubro de 12

Como obter?

Para obter a chave do Google Maps é

necessário estar com o certificado digital que se utiliza para assinar a

aplicação

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

Necessário obter o fingerprint

sábado, 27 de outubro de 12

Gerando chave

http://code.google.com/android/maps-api-signup.html

sábado, 27 de outubro de 12

Gerando chave

sábado, 27 de outubro de 12

Gerando chave

sábado, 27 de outubro de 12

public class MainActivity extends MapActivity {

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView mapView = new MapView(this, "key"); setContentView(mapView); }

@Override protected boolean isRouteDisplayed() { return false; }

}

MapActivity

sábado, 27 de outubro de 12

public class MainActivity extends MapActivity {

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView mapView = new MapView(this, "key"); setContentView(mapView); }

@Override protected boolean isRouteDisplayed() { return false; }

}

MapActivity

sábado, 27 de outubro de 12

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" >

<com.google.android.maps.MapView android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="key" />

</RelativeLayout>

sábado, 27 de outubro de 12

Métodos do MapView

Método DescriçãosetSatellite(boolean) Configura o mapa para visualização do tipo

satélite

setStreetView(boolean) Configura o mapa para exibir as ruas

setTraffic(boolean) Configura o mapa para aexibir as ruas e condições de tráfego

sábado, 27 de outubro de 12

Achando um ponto no mapa

GeoPoint geoPoint = new GeoPoint(latitudeE6, longitudeE6);

Necessário estar na notação de microdegress

sábado, 27 de outubro de 12

Microdegress

1E6 = 1.000.000

sábado, 27 de outubro de 12

//Grausdouble latitude = -25.442580;double longitude = -49.279840;//Converte para microdegress (graus * 1E6)int latitudeE6 = (int) (latitude * 1E6);int longitudeE6 = (int) (longitude * 1E6);

Exemplo

sábado, 27 de outubro de 12

GeoPoint

sábado, 27 de outubro de 12

Para definimos um ponto

sábado, 27 de outubro de 12

GeoPoint geoPoint = new GeoPoint(latitudeE6, longitudeE6);mapView.getController().setCenter(geoPoint);mapView.getController().setZoom(18);

Exemplo

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

setBuiltInZoomControls(boolean)

sábado, 27 de outubro de 12

setBuiltInZoomControls(boolean)

sábado, 27 de outubro de 12

mapView.setClickable(boolean);

Permitir (ou não) o usuário “passiar” pelo mapa

sábado, 27 de outubro de 12

Overlay

sábado, 27 de outubro de 12

Marcar posição

Necessário criar uma classe que extenda de Overlay

sábado, 27 de outubro de 12

CirculoOverleypublic class CirculoOverlay extends Overlay { private GeoPoint geoPoint; public CirculoOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (geoPoint != null) { Point point = mapView.getProjection().toPixels(geoPoint, null); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 10, paint); } }

}

sábado, 27 de outubro de 12

CirculoOverleypublic class CirculoOverlay extends Overlay { private GeoPoint geoPoint; public CirculoOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (geoPoint != null) { Point point = mapView.getProjection().toPixels(geoPoint, null); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 10, paint); } }

}

sábado, 27 de outubro de 12

CirculoOverleypublic class CirculoOverlay extends Overlay { private GeoPoint geoPoint; public CirculoOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (geoPoint != null) { Point point = mapView.getProjection().toPixels(geoPoint, null); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 10, paint); } }

}

sábado, 27 de outubro de 12

CirculoOverleypublic class CirculoOverlay extends Overlay { private GeoPoint geoPoint; public CirculoOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (geoPoint != null) { Point point = mapView.getProjection().toPixels(geoPoint, null); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 10, paint); } }

}

sábado, 27 de outubro de 12

CirculoOverleypublic class CirculoOverlay extends Overlay { private GeoPoint geoPoint; public CirculoOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (geoPoint != null) { Point point = mapView.getProjection().toPixels(geoPoint, null); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 10, paint); } }

}

sábado, 27 de outubro de 12

CirculoOverleypublic class CirculoOverlay extends Overlay { private GeoPoint geoPoint; public CirculoOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (geoPoint != null) { Point point = mapView.getProjection().toPixels(geoPoint, null); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(point.x, point.y, 10, paint); } }

}

sábado, 27 de outubro de 12

Podemos adicionar vários pontos

mapView.getOverlays().add(new CirculoOverlay(geoPoint));

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

Exercício

• Criar estrutura para se trabalhar com o google maps

• Adicionar no layout 2 edits para informar a latitude e a longitude

• Criar um botão que atualize a tela diante a informação nos edits

sábado, 27 de outubro de 12

Capturando minha localização

sábado, 27 de outubro de 12

MyLocationOverlay

MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);myLocationOverlay.enableCompass(); //Ativar bussolamyLocationOverlay.enableMyLocation();mapView.getOverlays().add(myLocationOverlay);

sábado, 27 de outubro de 12

LocationListenerpublic class MainActivity extends MapActivity implements LocationListener {

@Override public void onLocationChanged(Location arg0) { // TODO Auto-generated method stub }

@Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub }

@Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub }

@Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) {

LocationProvider.AVAILABLE LocationProvider.OUT_OF_SERVICE LocationProvider.TEMPORARILY_UNAVAILABLE }}

sábado, 27 de outubro de 12

LocationManager locationManager = (LocationManager) getSystemService(locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);if (!gpsEnabled) { Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(settingsIntent);}

sábado, 27 de outubro de 12

Pesquisando um endereço

sábado, 27 de outubro de 12

Geocode

Geocoder geocoder = new Geocoder(this);try { List<Address> addresses = geocoder.getFromLocationName(“Endereço”, maxResults); int latitude = calcular1E6(addresses.get(0).getLatitude()); int longitude = calcular1E6(addresses.get(0).getLongitude()); GeoPoint geoPoint = new GeoPoint(latitude, longitude); mapView.getOverlays().add(new CirculoOverlay(geoPoint)); mapView.getController().setCenter(geoPoint); mapView.getController().setZoom(18);} catch (IOException e) { e.printStackTrace();}

sábado, 27 de outubro de 12

Exercicio

• Adicionar um edit na tela para se digitar o endereço

• Adicionar um button na tela para pesquisar

• Adicionar mapa na tela

sábado, 27 de outubro de 12

Exercicio

sábado, 27 de outubro de 12

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >

<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" >

<EditText android:id="@+id/edtEndereco" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" />

<Button android:id="@+id/btnPesquisa" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pesquisar" android:onClick="onPesquisar" android:layout_gravity="center_horizontal" /> </LinearLayout>

<com.google.android.maps.MapView android:id="@+id/map_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="06T63Ikl10JbvKGOw8lqtEi8bvdlHJgwokXP1sw" />

</LinearLayout>

sábado, 27 de outubro de 12

Traçar rota

sábado, 27 de outubro de 12

SMS

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

Banco de dados

sábado, 27 de outubro de 12

Banco de dados

SQLite

sábado, 27 de outubro de 12

Banco de dados

SQLite

ORMLite

http://ormlite.com/sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

O que é ORMLite?

sábado, 27 de outubro de 12

O que é ORMLite?

Um framework ORM (Object Relational Mapping)

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

O que é necessário?

Baixar as libs:

http://ormlite.com/releases/4.42/ormlite-android-4.42.jar

http://ormlite.com/releases/4.42/ormlite-core-4.42.jar

sábado, 27 de outubro de 12

O que é necessário?

E coloca-las dentro da pasta libs no projeto

sábado, 27 de outubro de 12

O que é necessário?

sábado, 27 de outubro de 12

O que é necessário?Adicionar as libs ao projeto

sábado, 27 de outubro de 12

O que é necessário?

sábado, 27 de outubro de 12

O que é necessário?

sábado, 27 de outubro de 12

O que é necessário?

sábado, 27 de outubro de 12

O que é necessário?

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

Biblioteca do ORMLite adicionada

sábado, 27 de outubro de 12

sábado, 27 de outubro de 12

Vamos imaginar um pouco...

sábado, 27 de outubro de 12

Criar uma classe Cliente

sábado, 27 de outubro de 12

E fazer com que a classe represente uma tabela no banco

sábado, 27 de outubro de 12

public class Cliente { private String nome; private String endereco; private Date dataNascimento; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } public Date getDataNascimento() { return dataNascimento; } public void setDataNascimento(Date dataNascimento) { this.dataNascimento = dataNascimento; }}

sábado, 27 de outubro de 12

Annotation

sábado, 27 de outubro de 12

Annotation

@DatabaseField

@DatabaseTable

sábado, 27 de outubro de 12

@DatabaseTable

@DatabaseTablepublic class Cliente {}

sábado, 27 de outubro de 12

@DatabaseField

@DatabaseField private String nome;

sábado, 27 de outubro de 12

Exemplo@DatabaseTablepublic class Cliente { @DatabaseField(id=true, generatedId=true) private Integer id; @DatabaseField private String nome; @DatabaseField private String endereco; @DatabaseField(columnName="data_nascimento") private Date dataNascimento;

sábado, 27 de outubro de 12

DAO

Data Access Object

sábado, 27 de outubro de 12

ClienteDao

public class ClienteDao extends BaseDaoImpl<Cliente, Integer> {

public ClienteDao(ConnectionSource connectionSource) throws SQLException { super(Cliente.class); setConnectionSource(connectionSource); initialize(); }}

sábado, 27 de outubro de 12

ClienteDao

public class ClienteDao extends BaseDaoImpl<Cliente, Integer> {

public ClienteDao(ConnectionSource connectionSource) throws SQLException { super(Cliente.class); setConnectionSource(connectionSource); initialize(); }}

sábado, 27 de outubro de 12

Estrutura base

sábado, 27 de outubro de 12

DatabaseHelper

No proprio site do ORMLite é disponibilizada uma classe para auxiliar na criação/atualização/remorção do banco

http://ormlite.com/android/examples/

sábado, 27 de outubro de 12

DataBaseHelperpublic class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Cliente.class); //Aqui é definido as classes modelos que representam uma tabela no banco. } catch (SQLException e) { throw new RuntimeException(e); } }

sábado, 27 de outubro de 12

DataBaseHelperpublic class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Cliente.class); //Aqui é definido as classes modelos que representam uma tabela no banco. } catch (SQLException e) { throw new RuntimeException(e); } }

sábado, 27 de outubro de 12

DataBaseHelperpublic class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Cliente.class); //Aqui é definido as classes modelos que representam uma tabela no banco. } catch (SQLException e) { throw new RuntimeException(e); } }

sábado, 27 de outubro de 12

DataBaseHelperpublic class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Cliente.class); //Aqui é definido as classes modelos que representam uma tabela no banco. } catch (SQLException e) { throw new RuntimeException(e); } }

sábado, 27 de outubro de 12

DataBaseHelperpublic class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Cliente.class); //Aqui é definido as classes modelos que representam uma tabela no banco. } catch (SQLException e) { throw new RuntimeException(e); } }

sábado, 27 de outubro de 12

DataBaseHelperpublic class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String DATABASE_NAME = "banco.db"; private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

@Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Cliente.class); //Aqui é definido as classes modelos que representam uma tabela no banco. } catch (SQLException e) { throw new RuntimeException(e); } }

sábado, 27 de outubro de 12

@Override public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { Log.i(DatabaseHelper.class.getName(), "onUpgrade"); TableUtils.dropTable(connectionSource, Cliente.class, true); onCreate(db, connectionSource); } catch (SQLException e) { Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e); throw new RuntimeException(e); } }

DataBaseHelper

sábado, 27 de outubro de 12

@Override public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { Log.i(DatabaseHelper.class.getName(), "onUpgrade"); TableUtils.dropTable(connectionSource, Cliente.class, true); onCreate(db, connectionSource); } catch (SQLException e) { Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e); throw new RuntimeException(e); } }

DataBaseHelper

sábado, 27 de outubro de 12

@Override public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { Log.i(DatabaseHelper.class.getName(), "onUpgrade"); TableUtils.dropTable(connectionSource, Cliente.class, true); onCreate(db, connectionSource); } catch (SQLException e) { Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e); throw new RuntimeException(e); } }

DataBaseHelper

sábado, 27 de outubro de 12

Instânciando um DAO

sábado, 27 de outubro de 12

Instância do DAO

DatabaseHelper helper = new DatabaseHelper(getContext());

ClienteDao dao = new ClienteDao(helper.getConnectionSource());

sábado, 27 de outubro de 12

Persistindo um objeto

sábado, 27 de outubro de 12

dao.create(cliente);

sábado, 27 de outubro de 12

Buscando todos os objetos

sábado, 27 de outubro de 12

dao.queryForAll()

sábado, 27 de outubro de 12

Buscando por id

sábado, 27 de outubro de 12

dao.queryForId(id)

sábado, 27 de outubro de 12

Buscando por qualquer campo

sábado, 27 de outubro de 12

dao.queryForEq(fieldName, value)

sábado, 27 de outubro de 12

Exercício• Criar estrutura para se trabalhar com banco

de dados

• Criar uma classe que será persistida

• Criar o DAO dessa classe

• Criar tela com edits, cada edit será um campo

• Inserir botão de gravar

• Inserir botão para imprimir todos os dados no log

sábado, 27 de outubro de 12