Escolar Documentos
Profissional Documentos
Cultura Documentos
Incio Posts Comentrios Android Boas Prticas Testes JSF hibernate Ant
Ela deve conter a ao no qual ocorrer quando ela for selecionada. Ento ela deve conter uma Intent para saber o que fazer quando isso ocorrer. Um ponto pra ser reparado o fato de colocar a flag Intent.FLAG_ACTIVITY_NEW_TASK na Intent. Assim ela iniciar uma nova Activity a sua escolha.
Intent notificationIntent = new Intent(ctx, Activity.class); PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
//Aqui adicionamos o efeito de vibrar ao adicionar a notificao. Lembrando que para isso, precisamos adicionar a pe //<uses-permission android:name="android.permission.VIBRATE"></uses-permission> no AndroidManifest.xml notification.defaults |= Notification.DEFAULT_VIBRATE; long[] vibrate = {0,100,200,300}; notification.vibrate = vibrate; //Aqui estamos setando o ttulo para a notificao e o texto que ser exibido notification.setLatestEventInfo(ctx, "Ttulo", message, contentIntent); //Aqui estamos configurando o controle das notificaes. Para isso voc pega um servio do sistema NotificationManager manager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); //Ento s exibir a notificao pronta no sistema manager.notify(idNoty, notification);
Arquivado em Android
Vamos ao momento feliz, mo na massa!! O desafio ser o seguinte: Me achar no mapa. Mostrando a minha localizao pelo gps. I) Temos que criar uma o mapa.xml dentro do res/layout, uma vez que recebemos o cdigo do site do google que exibi acima.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.maps.MapView android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="0BN1gWBPEYDQluZey4KPKZH_C4AMH2sG02G1GLg" android:id="@+id/map_view"/> </LinearLayout>
II) Como j foi visto , uma tela uma Activity. Mas neste caso ser um MapActivity pois queremos todas as funcionalidades que um mapa pode nos dar. Vamos criar uma classe Mapa.java que extenda MapActivity:
@Override protected boolean isRouteDisplayed() { return false; } @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.mapa); mapView = (MapView) findViewById(R.id.map_view); mapController = mapView.getController(); //Pegamos os controles necessrios do nosso sistema. mapView.setSatellite(true); mapView.setStreetView(true); mapView.displayZoomControls(true); mapController.setZoom(14); final List<Overlay> overlays = mapView.getOverlays(); //Criamos um overlay, assim podemos nos achar no mapa e ainda mostrar o recurso de bssola(plus!). MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView); overlays.add(myLocationOverlay); myLocationOverlay.enableCompass(); myLocationOverlay.enableMyLocation();
//E temos que atualizar o nosso sistema, quando tivermos em movimento. Para isso, criamos um listener, e //a LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); criteria.setAltitudeRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_HIGH); String provider = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); atualizarMeuLocal(location); } LocationListener locationListener = new LocationListener() {
public void onStatusChanged(String provider, int status, Bundle extras) { } public void onProviderEnabled(String provider) { } public void onProviderDisabled(String provider) { atualizarMeuLocal(null); } public void onLocationChanged(Location location) { atualizarMeuLocal(location); } }; //Socilitamos que rode o listener a cada 2 segundos ou uma diferena de 20 metros. locationManager.requestLocationUpdates(provider, 2000, 20, locationListener ); }
//Agora temos que criar o nosso mtodo atualizarMeuLocal(Location location), repare que ele o location que private void atualizarMeuLocal(Location location) { if(location != null){ Double geoLat = location.getLatitude() * 1E6; Double geoLong = location.getLongitude() * 1E6; GeoPoint point = new GeoPoint(geoLat.intValue(), geoLong.intValue()); //Sempre que o o mtodo for chamado, ele ir mover o nosso mapa para a posio atual. mapController.animateTo(point); } }
Fazendo mais um menu na sua app para dar essa opo ao usurio, temos:
SmsManager smsManager = SmsManager.getDefault(); PendingIntent sentIntent = PendingIntent.getActivity(this, 0, null, 0); if(PhoneNumberUtils.isWellFormedSmsAddress(pessoa.getTelefone())){ smsManager.sendTextMessage(aluno.getTelefone(), null, "Enviando uma mensagem SMS..", sentIntent,null); Toast.makeText(this, "SMS enviado com sucesso!!", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(this, "Falha no SMS - Tente novamente..", Toast.LENGTH_LONG).show(); }
Para voc se acostumar com esses mtodos e aprender o que cada parmetro desses quer dizer recomendo a Documentao do Android. isso Boa Semana! Arquivado em Android
A maneira fcil Para efetuarmos ligaes telefnicas no Android voc chamar uma intent(inteno, bem bvio. Voc no manda em nada! Tem que pedir antes) de ligar pra algum, como segue:
try{ Intent chamada = new Intent(Intent.ACTION_CALL); chamada.setData(Uri.parse("tel:" + pessoa.getTelefone())); startActivity(chamada); }catch(ActivityNotFoundException e){ Log.e("Exemplo de chamada", "falha", e); }
Para que isso se torne funcional, vamos incluir um uma opo na nossa classe principal de listagem. Integrando com um contextMenu na app aps um longclick e buscando as informaes na base de dados. Agora precisamos incluir a permisso no AndroidManifest.xml.
<uses-permission android:name="android.permission.CALL_PHONE"/>
Com esse trecho de cdigo j ser possvel exibir a cmera do emulador ou no seu prprio dispositivo android. Agora vamos tratar do local onde sua app ir armazenar as fotos.
String arquivo = Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".jpg"; File file = new File(arquivo); Uri outputFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
A manipulao do arquivo feita pela classe File(padro do java) e a localizao do seu SDCard encontrada pelo mtodo Environment.getExternalStorageDirectory() . E as operaes adicionais que fizemos foi dar nome imagem e iniciar a atividade. E dando continuidade no nosso formulrio, iremos listar algo a mais para increment-la. Na classe Formulario.java que ser chamada pela sua Activity principal ao clicar em um registro da sua ListView, adicione esse cdigo.
private ImageButton ib; ib = (ImageButton) findViewById(R.id.foto);
ib.setImageResource(R.drawable.noimage); ib.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); arquivo = Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".jpg"; File file = new File(arquivo); Uri outputFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, TIRA_FOTO); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == TIRA_FOTO){ if(resultCode != RESULT_CANCELED){ aluno.setFoto(arquivo); carregaImagem(); } } } private void carregaImagem() { FileInputStream fis; Bitmap bmp = null; try { fis = new FileInputStream(aluno.getFoto()); bmp = BitmapFactory.decodeStream(fis); fis.close(); } catch (Exception e) { e.printStackTrace(); } if(bmp != null){ bmp = Bitmap.createScaledBitmap(bmp, 50, 50, true); } } }); if(aluno.getFoto() != null){ carregaImagem(); } }
Aqui tratamos do resultado da operao com o mtodo onActivityResult() e a exibio da foto atravs da classe Bitmap e FileInputStrem. Agora o resultado como ficou no seu emulador.
Clicando no boto:
isso..
Button botao = (Button) findViewById(R.id.botao); botao.setOnClickListener(new OnClickListener() { public void onClick(View v) { EditText nome = (EditText) findViewById(R.id.EditNome); EditText telefone = (EditText) findViewById(R.id.editTelefone); EditText site = (EditText) findViewById(R.id.editSite); EditText endereco = (EditText) findViewById(R.id.editEndereco); pessoa.setNome(nome.getEditableText().toString()); pessoa.setTelefone(telefone.getEditableText().toString()); pessoa.setSite(site.getEditableText().toString()); pessoa.setEndereco(endereco.getEditableText().toString()); PessoaDao dao = new PessoaDao(Formulario.this); if(posicao != -1){ pessoa.setId(posicao+1); dao.alterar(pessoa); }else{ dao.inserir(pessoa); } dao.close();
finish(); } });
Um ponto importante, se voc deixar desta maneira, a app vai comear a empilhar telas, ento vamos usar. Quando chamamos o mtodo finish, ele finaliza a Activity que est em primeiro plano, e ao voltar na anterior ele roda o mtodo onRestart() (Ver ciclo de vida das Activitys). Ento vamos implementar o onRestart na Activity principal.
@Override protected void onResume() { super.onResume(); carregaLista(); } private void carregaLista() { PessoaDao dao = new PessoaDao(this); List<Pessoa> pessoas = dao.getLista(); dao.close(); lista.setAdapter(new ArrayAdapter<View>(this, android.R.layout.simple_list_item_1,pessoas){ }
Quando eu j estiver inserido algum registro, o boto que ser renderizado ao clicar em um item na tela de listagem ser o boto de update de pessoa. Ento acesse o menu novo e veja o resultado.Ao final de tudo, o resultado ser esse.
Arquivado em Android
DESENVOLVER PARA ANDROID: PERSISTNCIA COM SQLite III (Criando nossa pgina de Formulrio).
03/04/2011 5 Comentrios Esse post no tem muito haver com persistncia em si. Porm precisaremos dele para demonstrar os resultados dos mtodos feitos anteriormente. Super rpido vou s demonstrar a tela gerada e o cdigo fonte.
estranho esse ImageButton solto na tela n? pois , voltaremos para ele nos prximos captulos. E no prximo post integraremos a tela criada com os mtodos do nosso DAO. Arquivado em Android Etiquetado com Android
DESENVOLVER PARA ANDROID: PERSISTENCIA COM SQLite II (OUTROS MTODOS PARA O NOSSO CRUD.).
01/04/2011 14 Comentrios Tendo a estrutura do nosso esquema criado, vamos criar outros mtodos no nosso DAO que ser necessrio para fecharmos nosso CRUD de Pessoa. O estilo bastante semelhante com o JDBC do Java, ou seja, teremos que converter manualmente um objeto na estrutura da tabela. Com uma
diferena, no ser preciso escrever a query em si, os mtodos do SQLiteDatabase j as encapsula. Apenas temos que cuidar dos parmetros que passaremos pra eles. Um objeto SQLiteDatabase j tem pronto o mtodo insert, que recebe o nome da tabela. Assim, para inserir um novo registro no BD, no precisamos do SQL, basta usar o mtodo que o SQL ser gerado automaticamente. Segue o exemplo do mtodo inserir na nossa classe PessoaDAO:
public void inserir(Pessoa pessoa){ ContentValues valores = new ContentValues(); valores.put("nome", pessoa.getNome()); valores.put("site", pessoa.getSite()); valores.put("foto", pessoa.getFoto()); valores.put("telefone", pessoa.getTelefone()); valores.put("endereco", pessoa.getEndereco()); getWritableDatabase().insert(TABELA, null, valores); }
Tendo o nosso C do CRUD em ordem, vamos para a listagem das pessoas cadastradas no banco. Para buscar todas as pessoas teremos que lidar com o objeto Cursor, fazendo um paralelo com o jdbc, se trata de um primo do ResultSet. E da mesma forma do insert, contamos o mtodo query que nos d mais liberdade nas buscas(liberdade = maior nmero de parmetros
Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
).
Os outros parmetros que deixamos em branco nos permite fazer select, groupBy, having, sortBy, por ai vai. s explorar a API para ganhar prtica nesses parmetros. Similarmente ao ResultSet, tendo o resultado da busca em um Cursor, bastamos iterar sobre suas linhas preenchendo o objeto Pessoa.
public List<Pessoa> getLista(){ Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null); List<Pessoa> lista = new ArrayList<Pessoa>(); while(c.moveToNext()){ Pessoa pessoa = new Pessoa(); pessoa.setId(c.getInt(0)); pessoa.setNome(c.getString(1)); pessoa.setTelefone(c.getString(2)); pessoa.setEndereco(c.getString(3)); pessoa.setSite(c.getString(4)); pessoa.setFoto(c.getString(5)); lista .add(pessoa); } c.close(); return lista; }
A app do nosso crud ganhando corpo.. isso galera, agora dar uma olhada nas coisas da Faculdade porque a boca quente. Arquivado em Android Etiquetado com Android
int id; String nome; String telefone; String endereco; String site; String foto;
Fazendo uma reprise, o DAO, ou Data Access Object, um padro que deve funcionar como ponte entre o mundo relacional do banco de dados, com o mundo OO das linguagens de alto nvel como o java. No caso do Android, o SQLite que um banco mais leve, salva os objetos em arquivos locais. Veremos que a metologia de implementao do DAO no Android se assemelha bastante com o JDBC do java. Para criar uma classe PessoaDAO.java, temos que estender SQLiteOpenHelper (ai est a diferena) e ter um construtor que receba um objeto do tipo Context. Esse objeto traz informaes sobre a aplicao. Ao receber esse objeto, chamamos o construtor da classe me, passando o contexto e algumas configuraes do seu banco em particular. Logo de sada, precisaremos sobrescrever dois mtodos: onCreate, mtodo que ao executar cria o nosso BD. onUpgrade, executado na alterao da estrutura do banco.
public class PessoaDAO extends SQLiteOpenHelper{ public PessoaDAO(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
Precisamos corrigir o construtor da classe, criaremos as constantes necessrias para configurao do banco:
private static final String TABELA = "Pessoa"; private static final int VERSION = 1; public PessoaDAO(Context context) { super(context, TABELA, null, VERSION); }
E por fim, para criarmos o banco, precisamos de um script SQL de criao informando as colunas e seus tipos.
"CREATE TABLE " + TABELA + "( id INTEGER PRIMARY KEY," + " nome TEXT UNIQUE NOT NULL," + " telefone TEXT," + " endereco TEXT," + " site TEXT, " + " foto TEXT" + ");";
Essa query ser executada na criao do banco, ento inserimos no mtodo onCreate(). E se alguma alterao for feita no banco, por exemplo, excluimos (essa no uma boa tcnica, perderemos os dados, mas isso s um pequeno tutorial) o anterior e criamos um novo com as alteraes. a seguir como ficaram os mtodos em questo:
@Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE " + TABELA + "( id INTEGER PRIMARY KEY," + " nome TEXT UNIQUE NOT NULL," + " telefone TEXT," + " endereco TEXT," + " site TEXT, " + " foto TEXT" + ");"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + PessoaDAO.TABELA); this.onCreate(db); }
To be continued.. Arquivado em Android Posts mais antigos JavaCE Community Conference EU VOU!
Tpicos recentes DESENVOLVENDO PARA ANDROID: NOTIFICAES. REFACTORING Caso Real e boas maneiras Parte IV (Keep Walking) REFACTORING Caso Real e boas maneiras Parte III (Solues) REFACTORING Caso Real e Boas Maneiras: Parte II (Bad Smells) REFACTORING Caso Real e boas maneiras Parte I (Intro) Arquivos janeiro 2012 novembro 2011 setembro 2011 agosto 2011 maio 2011 abril 2011 maro 2011 Categorias Android Ant Boas Prticas hibernate JSF Testes Mais Acessados
yuriadamsmaia.files.wordp yuriadamsmaia.files.wordp yuriadamsmaia.files.wordp yuriadamsmaia.files.wordp github.com/yuriadams. Lista de Links Cristiano Milfont Handerson Frota Igo Coelho JavaCE Marcos Brizeno Rafael Ponte Rodrigo Maia Rodrigo Maia Testes Yuri Adams Espancanento de putas e o Littlefinger na tenda do Renly? Wtf? 17 hours ago Nao estou gostando desse lado "for dummies" que game of thrones esta indo. 18 hours ago I unlocked the Game of Thrones: Garden of Bones sticker on @GetGlue! http://t.co/3b2HbRkq 18 hours ago RT @NFLBrasil: Trs jogos da MLB foram adiados hoje por causa da chuva. Pode at nevar que os jogos da NFL no so adiados! Logo NFL > ... 21 hours ago My Top 2 #lastfm Artists: Above & Beyond (2) & NC306 - Alottoni, Sra. Jovem Nerd, Portuguesa e Azaghal (1) http://t.co/20hEpVPE 22 hours ago Follow me! Digite seu endereo de email para acompanhar esse blog e receber notificaes de novos posts por email.
Powered by WordPress.com