SlideShare uma empresa Scribd logo
Android
                              Desenvolvimento




sábado, 27 de outubro de 12
Desenvolvedor de software
                                 www.carloscavalcanti.com
                               contato@carloscavalcanti.com
                                   twitter @carloscaval
                                github.com/carloscavalcanti




sábado, 27 de outubro de 12
Review


                               Google Maps


                                   SMS


                              Banco de dados




sábado, 27 de outubro de 12
Review


                               Google Maps


                                   SMS


                              Banco de dados




sábado, 27 de outubro de 12
Review


                               Google Maps


                                   SMS


                              Banco de dados




sábado, 27 de outubro de 12
Review


                               Google Maps


                                   SMS


                              Banco de dados




sábado, 27 de outubro de 12
Review


                               Google Maps


                                   SMS


                              Banco de dados




sábado, 27 de outubro de 12
sábado, 27 de outubro de 12
Review




sábado, 27 de outubro de 12
Review
    Activity




sábado, 27 de outubro de 12
Review
    Activity




sábado, 27 de outubro de 12
Review
    Activity




sábado, 27 de outubro de 12
Review
    Activity




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.xml
sábado, 27 de outubro de 12
Review




sábado, 27 de outubro de 12
Review
                                                              Intent

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

//Funcão para dar inicio a intent.

startActivity(it);




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
                                            TableLayout



                         FrameLayout




sábado, 27 de outubro de 12
Review

           AbsoluteLayout
                                                TableLayout



                         FrameLayout   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

         Adicionar no manifest

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

                                     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
MapActivity
              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;
              	     }

              }



sábado, 27 de outubro de 12
MapActivity
              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;
              	     }

              }



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ção
           setSatellite(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
Exemplo

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




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
Exemplo

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




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
CirculoOverley
public 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
CirculoOverley
public 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
CirculoOverley
public 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
CirculoOverley
public 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
CirculoOverley
public 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
CirculoOverley
public 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 bussola
myLocationOverlay.enableMyLocation();
mapView.getOverlays().add(myLocationOverlay);




sábado, 27 de outubro de 12
LocationListener
 public 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
Pegar o KML


                         http://maps.google.com/maps?
                         f=d&hl=en&saddr=25.04202,121.534761&daddr=25.0520
                         2,121.554761&ie=UTF8&0&om=0&output=kml




sábado, 27 de outubro de 12
SMS



sábado, 27 de outubro de 12
SMS
                import android.telephony.SmsManager;




 SmsManager smsManager = SmsManager.getDefault();
 smsManager.sendTextMessage("numero", null, "mensagem", null, null);


 sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)




                                                   Manifest
                                                 <uses-permission android:name="android.permission.SEND_SMS" />




sábado, 27 de outubro de 12
SMS
                import android.telephony.SmsManager;




 SmsManager smsManager = SmsManager.getDefault();
 smsManager.sendTextMessage("numero", null, "mensagem", null, null);


 sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)




                                                   Manifest
                                                 <uses-permission android:name="android.permission.SEND_SMS" />




sábado, 27 de outubro de 12
SMS
                import android.telephony.SmsManager;




 SmsManager smsManager = SmsManager.getDefault();
 smsManager.sendTextMessage("numero", null, "mensagem", null, null);


 sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)




                                                   Manifest
                                                 <uses-permission android:name="android.permission.SEND_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

                                   @DatabaseTable



            @DatabaseField




sábado, 27 de outubro de 12
@DatabaseTable

                               @DatabaseTable
                               public class Cliente {
                               }




sábado, 27 de outubro de 12
@DatabaseField


                               	 @DatabaseField
                               	 private String nome;




sábado, 27 de outubro de 12
Exemplo
                    @DatabaseTable
                    public 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
DataBaseHelper
 public 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
DataBaseHelper
 public 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
DataBaseHelper
 public 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
DataBaseHelper
 public 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
DataBaseHelper
 public 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
DataBaseHelper
 public 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
DataBaseHelper

	   @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);
	   	    }
	   }




sábado, 27 de outubro de 12
DataBaseHelper

	   @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);
	   	    }
	   }




sábado, 27 de outubro de 12
DataBaseHelper

	   @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);
	   	    }
	   }




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

Mais conteúdo relacionado

Destaque

Know Your Lineworker_Catalysts For Change Zone of Future Innovtion
Know Your Lineworker_Catalysts For Change Zone of Future InnovtionKnow Your Lineworker_Catalysts For Change Zone of Future Innovtion
Know Your Lineworker_Catalysts For Change Zone of Future InnovtionInstitute for the Future
 
Diapositivas tegno
Diapositivas tegnoDiapositivas tegno
Diapositivas tegnoanyiflak
 
Hyper Urban Farming_Catalysts For Change Zone of Future Innovtion
Hyper Urban Farming_Catalysts For Change Zone of Future InnovtionHyper Urban Farming_Catalysts For Change Zone of Future Innovtion
Hyper Urban Farming_Catalysts For Change Zone of Future InnovtionInstitute for the Future
 
Allenamente
AllenamenteAllenamente
Allenamente
ivanapravato
 
Cámbiate Transvulcania
Cámbiate TransvulcaniaCámbiate Transvulcania
Cámbiate Transvulcania
Leocadio Martin Borges
 
Rural Youth Stewards_Catalysts For Change Zone of Future Innovtion
Rural Youth Stewards_Catalysts For Change Zone of Future InnovtionRural Youth Stewards_Catalysts For Change Zone of Future Innovtion
Rural Youth Stewards_Catalysts For Change Zone of Future InnovtionInstitute for the Future
 
Gross Printed Product_Catalysts For Change Zone of Future Innovtion
Gross Printed Product_Catalysts For Change Zone of Future InnovtionGross Printed Product_Catalysts For Change Zone of Future Innovtion
Gross Printed Product_Catalysts For Change Zone of Future InnovtionInstitute for the Future
 
South Africa
South AfricaSouth Africa
South AfricaPorrenti
 
Why you should speak at Dialogkonferansen 2015
Why you should speak at Dialogkonferansen 2015Why you should speak at Dialogkonferansen 2015
Why you should speak at Dialogkonferansen 2015
Arild Horsberg/Bring Dialog
 
Final Assignment
Final AssignmentFinal Assignment
Final Assignment
Fianl Assignment
 
Obsessive compulsive disorder
Obsessive compulsive disorderObsessive compulsive disorder
Obsessive compulsive disordernli270
 
Areglado Exposicion
Areglado ExposicionAreglado Exposicion
Areglado Exposicioncarolina
 
Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...
Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...
Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...
Marko Grobelnik
 
CII's The Seventh Innovation Summit 2011 - Programme Agenda
CII's The Seventh Innovation Summit 2011 - Programme AgendaCII's The Seventh Innovation Summit 2011 - Programme Agenda
CII's The Seventh Innovation Summit 2011 - Programme Agenda
Innomantra
 
All Of The Above
All Of The AboveAll Of The Above
All Of The Above
kmurray230
 
Olivia 2009
Olivia 2009Olivia 2009
Olivia 2009
valenzuelao
 

Destaque (18)

Know Your Lineworker_Catalysts For Change Zone of Future Innovtion
Know Your Lineworker_Catalysts For Change Zone of Future InnovtionKnow Your Lineworker_Catalysts For Change Zone of Future Innovtion
Know Your Lineworker_Catalysts For Change Zone of Future Innovtion
 
Diapositivas tegno
Diapositivas tegnoDiapositivas tegno
Diapositivas tegno
 
Hyper Urban Farming_Catalysts For Change Zone of Future Innovtion
Hyper Urban Farming_Catalysts For Change Zone of Future InnovtionHyper Urban Farming_Catalysts For Change Zone of Future Innovtion
Hyper Urban Farming_Catalysts For Change Zone of Future Innovtion
 
Allenamente
AllenamenteAllenamente
Allenamente
 
Cámbiate Transvulcania
Cámbiate TransvulcaniaCámbiate Transvulcania
Cámbiate Transvulcania
 
Rural Youth Stewards_Catalysts For Change Zone of Future Innovtion
Rural Youth Stewards_Catalysts For Change Zone of Future InnovtionRural Youth Stewards_Catalysts For Change Zone of Future Innovtion
Rural Youth Stewards_Catalysts For Change Zone of Future Innovtion
 
Tratado practico de fotografia industrial
Tratado practico de fotografia industrialTratado practico de fotografia industrial
Tratado practico de fotografia industrial
 
Gross Printed Product_Catalysts For Change Zone of Future Innovtion
Gross Printed Product_Catalysts For Change Zone of Future InnovtionGross Printed Product_Catalysts For Change Zone of Future Innovtion
Gross Printed Product_Catalysts For Change Zone of Future Innovtion
 
South Africa
South AfricaSouth Africa
South Africa
 
Why you should speak at Dialogkonferansen 2015
Why you should speak at Dialogkonferansen 2015Why you should speak at Dialogkonferansen 2015
Why you should speak at Dialogkonferansen 2015
 
Final Assignment
Final AssignmentFinal Assignment
Final Assignment
 
Obsessive compulsive disorder
Obsessive compulsive disorderObsessive compulsive disorder
Obsessive compulsive disorder
 
Areglado Exposicion
Areglado ExposicionAreglado Exposicion
Areglado Exposicion
 
Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...
Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...
Language as social sensor - Marko Grobelnik - Dubrovnik - HrTAL2016 - 30 Sep ...
 
CII's The Seventh Innovation Summit 2011 - Programme Agenda
CII's The Seventh Innovation Summit 2011 - Programme AgendaCII's The Seventh Innovation Summit 2011 - Programme Agenda
CII's The Seventh Innovation Summit 2011 - Programme Agenda
 
All Of The Above
All Of The AboveAll Of The Above
All Of The Above
 
2010.01.01 inventarisatie
2010.01.01 inventarisatie 2010.01.01 inventarisatie
2010.01.01 inventarisatie
 
Olivia 2009
Olivia 2009Olivia 2009
Olivia 2009
 

Semelhante a Aula android 03

Boas práticas de Design em Aplicações Rails
Boas práticas de Design em Aplicações RailsBoas práticas de Design em Aplicações Rails
Boas práticas de Design em Aplicações Railsrinaldifonsecanascimento
 
Boas Práticas de Design em Aplicações Ruby on Rails
Boas Práticas de Design em Aplicações Ruby on RailsBoas Práticas de Design em Aplicações Ruby on Rails
Boas Práticas de Design em Aplicações Ruby on Rails
rinaldifonsecanascimento
 
Persistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidPersistencia de dados em aplicações Android
Persistencia de dados em aplicações Android
Antonio Marin Neto
 
Performance Front-end | Front In Maceió
Performance Front-end | Front In MaceióPerformance Front-end | Front In Maceió
Performance Front-end | Front In Maceió
Descomplica
 
"Realidoid" Aumentada
"Realidoid" Aumentada"Realidoid" Aumentada
"Realidoid" Aumentada
Ramon Ribeiro Rabello
 

Semelhante a Aula android 03 (6)

Boas práticas de Design em Aplicações Rails
Boas práticas de Design em Aplicações RailsBoas práticas de Design em Aplicações Rails
Boas práticas de Design em Aplicações Rails
 
Boas Práticas de Design em Aplicações Ruby on Rails
Boas Práticas de Design em Aplicações Ruby on RailsBoas Práticas de Design em Aplicações Ruby on Rails
Boas Práticas de Design em Aplicações Ruby on Rails
 
Aula android 01.pdf
Aula android 01.pdfAula android 01.pdf
Aula android 01.pdf
 
Persistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidPersistencia de dados em aplicações Android
Persistencia de dados em aplicações Android
 
Performance Front-end | Front In Maceió
Performance Front-end | Front In MaceióPerformance Front-end | Front In Maceió
Performance Front-end | Front In Maceió
 
"Realidoid" Aumentada
"Realidoid" Aumentada"Realidoid" Aumentada
"Realidoid" Aumentada
 

Mais de Carlos Cavalcanti

Study jam - dia 1
Study jam  - dia 1Study jam  - dia 1
Study jam - dia 1
Carlos Cavalcanti
 
Hello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no androidHello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no android
Carlos Cavalcanti
 
O mobile no mundo corporativo
O mobile no mundo corporativo O mobile no mundo corporativo
O mobile no mundo corporativo
Carlos Cavalcanti
 
Testes automatizados de interface no Android
Testes automatizados de interface no AndroidTestes automatizados de interface no Android
Testes automatizados de interface no Android
Carlos Cavalcanti
 
Diga hello world ao mundo mobile
Diga hello world ao mundo mobileDiga hello world ao mundo mobile
Diga hello world ao mundo mobile
Carlos Cavalcanti
 
GDG Natal
GDG NatalGDG Natal
Aula android 04
Aula android 04Aula android 04
Aula android 04
Carlos Cavalcanti
 
Introdução a java
Introdução a javaIntrodução a java
Introdução a java
Carlos Cavalcanti
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
Carlos Cavalcanti
 
Apresentação
ApresentaçãoApresentação
Apresentação
Carlos Cavalcanti
 
Android: Mercado&Desenvolvimento
Android: Mercado&DesenvolvimentoAndroid: Mercado&Desenvolvimento
Android: Mercado&Desenvolvimento
Carlos Cavalcanti
 

Mais de Carlos Cavalcanti (13)

Study jam - dia 1
Study jam  - dia 1Study jam  - dia 1
Study jam - dia 1
 
Hello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no androidHello world ao mundo mobile focado no android
Hello world ao mundo mobile focado no android
 
O mobile no mundo corporativo
O mobile no mundo corporativo O mobile no mundo corporativo
O mobile no mundo corporativo
 
Testes automatizados de interface no Android
Testes automatizados de interface no AndroidTestes automatizados de interface no Android
Testes automatizados de interface no Android
 
Diga hello world ao mundo mobile
Diga hello world ao mundo mobileDiga hello world ao mundo mobile
Diga hello world ao mundo mobile
 
GDG Natal
GDG NatalGDG Natal
GDG Natal
 
Aula android 05
Aula android 05Aula android 05
Aula android 05
 
Aula android 04
Aula android 04Aula android 04
Aula android 04
 
Aula android 02.pdf
Aula android 02.pdfAula android 02.pdf
Aula android 02.pdf
 
Introdução a java
Introdução a javaIntrodução a java
Introdução a java
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Android: Mercado&Desenvolvimento
Android: Mercado&DesenvolvimentoAndroid: Mercado&Desenvolvimento
Android: Mercado&Desenvolvimento
 

Aula android 03

  • 1. Android Desenvolvimento sábado, 27 de outubro de 12
  • 2. Desenvolvedor de software www.carloscavalcanti.com contato@carloscavalcanti.com twitter @carloscaval github.com/carloscavalcanti sábado, 27 de outubro de 12
  • 3. Review Google Maps SMS Banco de dados sábado, 27 de outubro de 12
  • 4. Review Google Maps SMS Banco de dados sábado, 27 de outubro de 12
  • 5. Review Google Maps SMS Banco de dados sábado, 27 de outubro de 12
  • 6. Review Google Maps SMS Banco de dados sábado, 27 de outubro de 12
  • 7. Review Google Maps SMS Banco de dados sábado, 27 de outubro de 12
  • 8. sábado, 27 de outubro de 12
  • 9. Review sábado, 27 de outubro de 12
  • 10. Review Activity sábado, 27 de outubro de 12
  • 11. Review Activity sábado, 27 de outubro de 12
  • 12. Review Activity sábado, 27 de outubro de 12
  • 13. Review Activity sábado, 27 de outubro de 12
  • 14. Review sábado, 27 de outubro de 12
  • 15. Review Ciclo de vida sábado, 27 de outubro de 12
  • 16. Review sábado, 27 de outubro de 12
  • 17. Review AndroidManifest.xml sábado, 27 de outubro de 12
  • 18. Review sábado, 27 de outubro de 12
  • 19. Review Intent //Criando uma intent, onde iremos dizer para onde essa "intenção" irá. Intent it = new Intent(ClassActivityCorrente.this, OutraTelaActivity.class); //Funcão para dar inicio a intent. startActivity(it); sábado, 27 de outubro de 12
  • 20. Review sábado, 27 de outubro de 12
  • 21. 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
  • 22. Review sábado, 27 de outubro de 12
  • 23. Review Passar informações entre activitys putExtra() get?Extra() sábado, 27 de outubro de 12
  • 24. Review sábado, 27 de outubro de 12
  • 25. Review BroadcastReceiver sábado, 27 de outubro de 12
  • 26. Review BroadcastReceiver Notification sábado, 27 de outubro de 12
  • 27. Review BroadcastReceiver Notification Service sábado, 27 de outubro de 12
  • 28. Review sábado, 27 de outubro de 12
  • 29. Review AbsoluteLayout sábado, 27 de outubro de 12
  • 30. Review AbsoluteLayout FrameLayout sábado, 27 de outubro de 12
  • 31. Review AbsoluteLayout TableLayout FrameLayout sábado, 27 de outubro de 12
  • 32. Review AbsoluteLayout TableLayout FrameLayout RelativeLayout sábado, 27 de outubro de 12
  • 33. Google Maps sábado, 27 de outubro de 12
  • 34. Primeiro passo sábado, 27 de outubro de 12
  • 35. Primeiro passo sábado, 27 de outubro de 12
  • 36. Primeiro passo sábado, 27 de outubro de 12
  • 37. Primeiro passo sábado, 27 de outubro de 12
  • 38. Se o projeto estiver criado? sábado, 27 de outubro de 12
  • 39. Se o projeto estiver criado? sábado, 27 de outubro de 12
  • 40. Se o projeto estiver criado? sábado, 27 de outubro de 12
  • 41. Utilizar a library Adicionar no manifest <uses-library android:name="com.google.android.maps"/> Dentro da tag <application> sábado, 27 de outubro de 12
  • 42. 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
  • 43. Chave de acesso Para se trabalhar com o Google maps é necessário obter uma chave sábado, 27 de outubro de 12
  • 44. 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
  • 45. sábado, 27 de outubro de 12
  • 46. Necessário obter o fingerprint sábado, 27 de outubro de 12
  • 47. Gerando chave http://code.google.com/android/maps-api-signup.html sábado, 27 de outubro de 12
  • 48. Gerando chave sábado, 27 de outubro de 12
  • 49. Gerando chave sábado, 27 de outubro de 12
  • 50. MapActivity 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; } } sábado, 27 de outubro de 12
  • 51. MapActivity 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; } } sábado, 27 de outubro de 12
  • 52. <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
  • 53. Métodos do MapView Método Descrição setSatellite(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
  • 54. 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
  • 55. Microdegress 1E6 = 1.000.000 sábado, 27 de outubro de 12
  • 56. Exemplo //Graus double latitude = -25.442580; double longitude = -49.279840; //Converte para microdegress (graus * 1E6) int latitudeE6 = (int) (latitude * 1E6); int longitudeE6 = (int) (longitude * 1E6); sábado, 27 de outubro de 12
  • 57. GeoPoint sábado, 27 de outubro de 12
  • 58. Para definimos um ponto sábado, 27 de outubro de 12
  • 59. Exemplo GeoPoint geoPoint = new GeoPoint(latitudeE6, longitudeE6); mapView.getController().setCenter(geoPoint); mapView.getController().setZoom(18); sábado, 27 de outubro de 12
  • 60. sábado, 27 de outubro de 12
  • 63. mapView.setClickable(boolean); Permitir (ou não) o usuário “passiar” pelo mapa sábado, 27 de outubro de 12
  • 64. Overlay sábado, 27 de outubro de 12
  • 65. Marcar posição Necessário criar uma classe que extenda de Overlay sábado, 27 de outubro de 12
  • 66. CirculoOverley public 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
  • 67. CirculoOverley public 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
  • 68. CirculoOverley public 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
  • 69. CirculoOverley public 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
  • 70. CirculoOverley public 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
  • 71. CirculoOverley public 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
  • 72. Podemos adicionar vários pontos mapView.getOverlays().add(new CirculoOverlay(geoPoint)); sábado, 27 de outubro de 12
  • 73. sábado, 27 de outubro de 12
  • 74. 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
  • 75. Capturando minha localização sábado, 27 de outubro de 12
  • 76. MyLocationOverlay MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView); myLocationOverlay.enableCompass(); //Ativar bussola myLocationOverlay.enableMyLocation(); mapView.getOverlays().add(myLocationOverlay); sábado, 27 de outubro de 12
  • 77. LocationListener public 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
  • 78. 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
  • 79. Pesquisando um endereço sábado, 27 de outubro de 12
  • 80. 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
  • 81. 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
  • 82. Exercicio sábado, 27 de outubro de 12
  • 83. <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
  • 84. Traçar rota sábado, 27 de outubro de 12
  • 85. Pegar o KML http://maps.google.com/maps? f=d&hl=en&saddr=25.04202,121.534761&daddr=25.0520 2,121.554761&ie=UTF8&0&om=0&output=kml sábado, 27 de outubro de 12
  • 86. SMS sábado, 27 de outubro de 12
  • 87. SMS import android.telephony.SmsManager; SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("numero", null, "mensagem", null, null); sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) Manifest <uses-permission android:name="android.permission.SEND_SMS" /> sábado, 27 de outubro de 12
  • 88. SMS import android.telephony.SmsManager; SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("numero", null, "mensagem", null, null); sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) Manifest <uses-permission android:name="android.permission.SEND_SMS" /> sábado, 27 de outubro de 12
  • 89. SMS import android.telephony.SmsManager; SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("numero", null, "mensagem", null, null); sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) Manifest <uses-permission android:name="android.permission.SEND_SMS" /> sábado, 27 de outubro de 12
  • 90. sábado, 27 de outubro de 12
  • 91. Banco de dados sábado, 27 de outubro de 12
  • 92. Banco de dados SQLite sábado, 27 de outubro de 12
  • 93. Banco de dados SQLite ORMLite http://ormlite.com/ sábado, 27 de outubro de 12
  • 94. sábado, 27 de outubro de 12
  • 95. O que é ORMLite? sábado, 27 de outubro de 12
  • 96. O que é ORMLite? Um framework ORM (Object Relational Mapping) sábado, 27 de outubro de 12
  • 97. sábado, 27 de outubro de 12
  • 98. 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
  • 99. O que é necessário? E coloca-las dentro da pasta libs no projeto sábado, 27 de outubro de 12
  • 100. O que é necessário? sábado, 27 de outubro de 12
  • 101. O que é necessário? Adicionar as libs ao projeto sábado, 27 de outubro de 12
  • 102. O que é necessário? sábado, 27 de outubro de 12
  • 103. O que é necessário? sábado, 27 de outubro de 12
  • 104. O que é necessário? sábado, 27 de outubro de 12
  • 105. O que é necessário? sábado, 27 de outubro de 12
  • 106. sábado, 27 de outubro de 12
  • 107. Biblioteca do ORMLite adicionada sábado, 27 de outubro de 12
  • 108. sábado, 27 de outubro de 12
  • 109. Vamos imaginar um pouco... sábado, 27 de outubro de 12
  • 110. Criar uma classe Cliente sábado, 27 de outubro de 12
  • 111. E fazer com que a classe represente uma tabela no banco sábado, 27 de outubro de 12
  • 112. 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
  • 113. Annotation sábado, 27 de outubro de 12
  • 114. Annotation @DatabaseTable @DatabaseField sábado, 27 de outubro de 12
  • 115. @DatabaseTable @DatabaseTable public class Cliente { } sábado, 27 de outubro de 12
  • 116. @DatabaseField @DatabaseField private String nome; sábado, 27 de outubro de 12
  • 117. Exemplo @DatabaseTable public 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
  • 118. DAO Data Access Object sábado, 27 de outubro de 12
  • 119. 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
  • 120. 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
  • 121. Estrutura base sábado, 27 de outubro de 12
  • 122. 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
  • 123. DataBaseHelper public 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
  • 124. DataBaseHelper public 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
  • 125. DataBaseHelper public 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
  • 126. DataBaseHelper public 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
  • 127. DataBaseHelper public 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
  • 128. DataBaseHelper public 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
  • 129. DataBaseHelper @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); } } sábado, 27 de outubro de 12
  • 130. DataBaseHelper @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); } } sábado, 27 de outubro de 12
  • 131. DataBaseHelper @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); } } sábado, 27 de outubro de 12
  • 132. Instânciando um DAO sábado, 27 de outubro de 12
  • 133. Instância do DAO DatabaseHelper helper = new DatabaseHelper(getContext()); ClienteDao dao = new ClienteDao(helper.getConnectionSource()); sábado, 27 de outubro de 12
  • 134. Persistindo um objeto sábado, 27 de outubro de 12
  • 136. Buscando todos os objetos sábado, 27 de outubro de 12
  • 138. Buscando por id sábado, 27 de outubro de 12
  • 140. Buscando por qualquer campo sábado, 27 de outubro de 12
  • 142. 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