Pesquisar na Comunidade

A mostrar resultados para tags ''android''.

  • Pesquisa por Tags

    Introduza as tags separadas por vírgulas.
  • Pesquisar por Autor

Tipo de Conteúdo


Fórum

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
    • Apresentações
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática Extra-Programação
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Projectos
  • Revista PROGRAMAR
  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Wiki

Categorias

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros



Filtrar por número de...

146 resultados

  1. Olá Estou a tentar implementar um autocomplete para uma pesquisa populada por uma base de dados Sqlite. Criei um metodo para devolver um ArrayList dos dados que quero usar no autocomplete que é o seguinte: //Get Concelhos to Search Autocomplete public ArrayList<String> getListConcelhos() { ArrayList<String> listaConcelhos = new ArrayList<>(); dbase = this.getReadableDatabase(); Cursor cursor = dbase.rawQuery("SELECT DISTINCT CONCELHO FROM " + TABLE_NAME, null); //cursor.moveToFirst(); while (cursor.moveToNext()) { String value = cursor.getString( cursor.getColumnIndex("CONCELHO")); listaConcelhos.add(value); } return listaConcelhos; } E então na activity chamar usando isto: dbHelper = new DbHelper(this); listaConcelhos = dbHelper.getListConcelhos(); String[] arrayConcelhos = listaConcelhos.toArray(new String[listaConcelhos.size()]); text=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1); ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayConcelhos); text.setAdapter(adapter); text.setThreshold(1); No entanto isto não funciona, pois ao correr o autocomplete não retorna a dropdownlist com as opções... Usei um Log para verificar se o método estaria a retornar correctamente os dados e efectivamente o Log retorna a lista de concelhos. Log.e("LOG: ", listaConcelhos.toString()); No entanto se eu usar uma string estática, o AutoCompleteTextView é populado: String[] concelhos = {"Concelho 1", "Concelho2"}; text=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1); ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,concelhos); text.setAdapter(adapter); text.setThreshold(1); Desta forma funciona correctamente. Alguém me pode ajudar a perceber o que estarei a fazer de mal?
  2. Olá boa tarde, Gostaria de saber como é que o sistema operativo Android elimina vírus informáticos nos telemóveis. Neste momento tenho a versão 5.1.1, mas será o antivírus do sistema suficiente para eliminar não só bots, mas também vírus como spywares e outros destinados a roubar dados pessoais? Que antivírus serão mais aconselhados para estes dispositivos móveis? Obrigada.
  3. Boa tarde, estou a tentar implementar um Search numa determinada listView, mas sem sucesso, será que me podem ajudar? O código que tenho até ao momento é o seguinte: Activity principal: public class CorposBombeirosActivity extends AppCompatActivity { ListView lv; DbHelper dbHelper; LVAdapter lvAdapter; ArrayList<CorpoBombeiros> listCorposBombeiros; //Variable Declaration private AdView mAdView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // remove title getSupportActionBar().hide(); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //Bloquear Orientação Ecrã a Portrait setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.activity_corpos_bombeiros); //Publicity mAdView = (AdView) findViewById(R.id.adView); //mAdView.setAdSize(AdSize.BANNER); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); //Método que desencadeia os métodos de cópia da BD na classe DbHelper para a pasta databases no Android DbHelper myDbHelper = new DbHelper(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle; } dbHelper = new DbHelper(this); lv = (ListView) findViewById(R.id.listView); listCorposBombeiros = new ArrayList<CorpoBombeiros>(); listCorposBombeiros.addAll(dbHelper.getListaCorposBombeiros()); lvAdapter = new LVAdapter(this, R.layout.corpo__bombeiros_item, listCorposBombeiros); lv.setAdapter(lvAdapter); //Open Detail Activity lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Intent intent = new Intent(CorposBombeirosActivity.this, CorposBombeirosDetailActivity.class); CorpoBombeiros p = (CorpoBombeiros) lvAdapter.getItem(arg2); intent.putExtra("CORPO_BOMBEIROS_ID", p.getID()); startActivity(intent); } }); } Classe LvAdapter: public class LVAdapter extends BaseAdapter{ Context context; int layout_id; private final List<CorpoBombeiros> items; //Constructor public LVAdapter(final Context context, final int layout_id, final List<CorpoBombeiros> items){ this.context = context; this.layout_id = layout_id; this.items = items; } //Count items public int getCount(){ return this.items.size(); } public Object getItem(int arg0){ return this.items.get(arg0); } public long getItemId(int arg0){ return 0; } @Override public View getView(int arg0, View arg1, ViewGroup arg2) { final CorpoBombeiros row = this.items.get(arg0); View itemView = null; if (arg1 == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); itemView = inflater.inflate(layout_id, null); } else { itemView = arg1; } String cod_cb = Integer.toString(row.getCODIGO_CB()); TextView textViewCodigo_cb = (TextView)itemView.findViewById(R.id.textView_nome); textViewCodigo_cb.setText(cod_cb); TextView textViewCb = (TextView)itemView.findViewById(R.id.textView_cb); textViewCb.setText(row.getCB()); TextView textViewConcelho = (TextView)itemView.findViewById(R.id.textView_AOS); textViewConcelho.setText(row.getCONCELHO()); return itemView; } Alguém me pode ajudar e explicar como posso inserir aqui uma caixa de pesquisa do tipo search box que vá filtrando os items da listview a medida que vamos escrevendo algo na search box?
  4. Boa noite, Estou com alguma dificuldade em conseguir fazer o pedido das permissões em runtime, sendo que apenas o dialog de aceitação de permissões de uma das duas permissoes necessárias é mostrado quando clico no button. /*Button PANIC Button @ Click this button to send a PANIC message to defined contact @ Inside the message go a PANIC message, name of person and GPS location */ Button button_panic = (Button) findViewById(R.id.button_panic); button_panic.setOnClickListener(new OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.M) @Override public void onClick(View v) { if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { requestLocationPermission(); requestSMSPermission(); String Message = "GRANTED"; Log.i("Location permission", Message); } else { sendMsg(); } } }); } @RequiresApi(api = Build.VERSION_CODES.M) private void getLocation() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. //requestLocationPermission(); return; } locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); String longitudeString = String.valueOf(location.getLongitude()); String latitudeString = String.valueOf(location.getLatitude()); message = "PANIC - Preciso de Ajuda " + Nome + " " + Apelido + ". " + "Esta é a minha localização: Latitude: " + latitudeString + " Longitude: " + longitudeString; Log.e("Log Message", message); } @RequiresApi(api = Build.VERSION_CODES.M) private void sendMsg() { getLocation(); SmsManager smsManager = SmsManager.getDefault(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { requestSMSPermission(); } if (location != null) { smsManager.sendTextMessage(Telefone, null, message, null, null); Toast.makeText(MainActivity.this, "Sent to " + Telefone, Toast.LENGTH_SHORT).show(); } else { smsManager.sendTextMessage(Telefone, null, "test", null, null); Toast.makeText(MainActivity.this, "Please open your location service", Toast.LENGTH_SHORT).show(); } } @RequiresApi(api = Build.VERSION_CODES.M) private void requestSMSPermission() { requestPermissions(new String[]{Manifest.permission.SEND_SMS}, REQUEST_PERMISSION_SEND_SMS_CODE); } @RequiresApi(api = Build.VERSION_CODES.M) private void requestLocationPermission() { requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_FINE_LOCATION_CODE); requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_COARSE_LOCATION_CODE); } A questão das permissões ao executar o metodo onClickButton é apresentada de imediato o dialog para permitir a localização, mas apos permitir a app crasha e pelos logs reporta o seguinte erro referente à falta da permissão para SMS. No entanto se eu arrancar de novo a app, agora já com a permissão para a localização garantida, e executar de novo o metodo onClickButon é apresentada o dialog para a permissão do SMS. Além disso pelos log's eu consigo ver que a mensagem é gerada com sucesso, e pela impressão do Toast 'Sent to 93xxxxxxx' consigo perceber que foi executado o método mas na realidade a SMS nunca chega ao destino. Alguém me pode ajudar a ajeitar isto de forma a conseguir ter tudo funcional...
  5. Olá, estou escrevendo para contar e compartilhar com um projeto que eu só percebi, é chamado de pseudo-código, é uma aplicação Android, destinado a estudantes que frequentam os primeiros ciclos e fazer o curso de algoritmos e programação, eu ter tomado esse curso ea ele precisa fazer uma ferramenta para testar os nossos algoritmos, especialmente a partir do celular no momento em que é essencial para cada aluno, como nem todos andar com um laptop na mochila. I compartilhar o link do meu projeto: https : // play.google.com /store/apps/details?id=pe.diegoveloper.pseudocode Ele é baseado no pseudocódigo ferramenta para PC: PSeInt (estritamente) http : // pseint. sourceforge . net/ A aplicação suporta Inglês e Espanhol, se quisessem traduzi-lo para necessidade Português de sua ajuda, você acha? lembranças
  6. Bom dia, Eu estou a desenvolver um aplicação para android usando o software Android Studio. A minha aplicação contém dois Fragments: Home fragment e Genres fragment. No Genres fragment, tenho quatro ImageButton que quero que abram outros Fragments quando carregados. Para inicializar os botões, eu usei o método OnClickListener, mas surgiu uma dúvida. Eu tenho uma função com o operador switch, mas eu não sei o que pôr dentro do case de cada botão. O código é este: public class GenresFragment extends Fragment implements View.OnClickListener{ public GenresFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.fragment_genres, container, false); ImageButton rapBtn = (ImageButton)v.findViewById(R.id.RapButton); ImageButton popBtn = (ImageButton)v.findViewById(R.id.PopButton); ImageButton edmBtn = (ImageButton)v.findViewById(R.id.EDMButton); ImageButton rockBtn = (ImageButton)v.findViewById(R.id.RockButton); rapBtn.setOnClickListener(this); popBtn.setOnClickListener(this); edmBtn.setOnClickListener(this); rockBtn.setOnClickListener(this); return v; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.RapButton: break; case R.id.PopButton: break; case R.id.EDMButton: break; case R.id.RockButton: break; } } } Podem-me ajudar? Obrigado
  7. Boa tarde, Estou a tentar criar uma pequena app que envie uma mensagem com as coordenadas do dispositivo, no entanto não estou a conseguir implementar a obtenção das coordenadas e respectiva injecção na SMS. Consigo enviar uma SMS, mas agora como é que obtenho as coordenadas e as injecto na SMS? Aqui fica o código que tenho até agora: public class MainActivity extends AppCompatActivity { private static final int PERMISSION_REQUEST = 100; protected Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button_panic = (Button) findViewById(R.id.button_panic); button_panic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { //Runtime Permission Request if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { if (shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS)) { } else { requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST); } } else { sendSMS(); } } else { sendSMS(); } } else { showAlert(); } } }); } /*Send Message Method @ @Comment: Method to send a SMS using an intent */ private void sendSMS() { //SharedPreferences final SharedPreferences sharedpreferences; //Define SharedPreferences sharedpreferences = getSharedPreferences("PANIC_PREFERENCES", Context.MODE_PRIVATE); //Get SharedPreferences to Send PANIC SMS //Retrieve SharedPreferences // final String nome = sharedpreferences.getString("Key_nome", null); // final String apelido = sharedpreferences.getString("Key_apelido", null); // final String telefone = sharedpreferences.getString("Key_telefone", null); final String nome = "Nuno"; final String apelido = "Santos"; final String telefone = "123456789"; //Verify if sharedPreferences no Null - User Data Are Available if (nome != "" && apelido != "" && telefone != "") { String message = "PANIC - Preciso de Ajuda " + nome + " " + apelido; //+ " " + "Esta é a minha localização: Latitude: " + latitude_msg + " Longitude: " + longitude_msg; //Sens SMS SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(telefone, null, message, null, null); Toast.makeText(getApplicationContext(), "SMS Enviada.", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "Dados do Utilizador Não Preenchidos!!", Toast.LENGTH_LONG).show(); } } /*Request Permission @ @Comment: Method to request permission to send SMS in Android versions over 23 - Marshmallow */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { sendSMS(); } else { } } /*GPS Location @ @Comment: Method to request permission to send SMS in Android versions over 23 - Marshmallow */ private void showAlert() { final AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("Ative a Sua Localização") .setMessage("A Sua Localização GPS está 'Off'.\nPor favor Ative a sua localização para " + "usar esta funcionalidade") .setPositiveButton("Location Settings", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface paramDialogInterface, int paramInt) { Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(myIntent); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface paramDialogInterface, int paramInt) { } }); dialog.show(); } } Alguém me pode ajudar a implementar a obtenção das coordenadas e a injecção na SMS? Terei de utilizar uma AsyncTask para obter as coordenadas e só depois dessa obtenção as injectar na SMS e enviar a respectiva? Agradecia a ajuda, pois tenho tentado sem sucesso até então. Cumps
  8. Boa noite. Tenho um trabalho de disciplina de testes de software. O meu grupo ficou encarregue de fazer uma apresentação da ferramenta de testes Robotium em Android Studio e uma demonstração. Segui alguns tutoriais no youtube (https://www.youtube.com/watch?v=mTF2k5NlFds), mas chego a uma parte e não consigo avançar mais. O objectivo deste teste é verificar se quando clicado o botão na "MainActivity" este apresenta a seguinte String. MainActivity package com.example.mirror.robotiumteste; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private Button btn_click; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Botão btn_click = (Button) findViewById(R.id.btn_test); //Visor de Texto (Text View) tv = (TextView) findViewById(R.id.main_tv); //Inserir texto na TextView depois de clicar no botão btn_click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tv.setText("Super!!!"); } }); } } Classe teste package com.example.mirror.robotiumteste; import android.test.ActivityInstrumentationTestCase2; import junit.framework.Assert; import android.test.suitebuilder.annotation.LargeTest; import android.widget.Button; import android.widget.TextView; import com.robotium.solo.Solo; /** * Created by mirror on 30/12/2016. */ public class exemploTeste extends ActivityInstrumentationTestCase2<MainActivity> { private Solo solo; public exemploTeste() { super(MainActivity.class); } @Override public void setUp() throws Exception { super.setUp(); solo = new Solo(getInstrumentation(), getActivity()); } @Override public void tearDown() throws Exception { solo.finishOpenedActivities(); super.tearDown(); } public void test_MainActivityChangeTextView_hi() throws Exception{ solo.unlockScreen(); Button btn_test = (Button) solo.getView(R.id.btn_test); solo.clickOnView(btn_test); solo.waitForText("hi", 1, 2000); TextView tv = (TextView) solo.getView(R.id.main_tv); String result = tv.getText().toString(); assertEquals(result, "All working"); } public void testEquals() throws Exception{ assertEquals(1, 1); } public void testBoolean() throws Exception{ assertTrue(true); } } O problema aparece no "ActivityInstrumentationTestCase2". Este aparece-me rasurado com uma mensagem que diz "android.test.ActivityInstrumentationTestCase2' is deprecated". Não sei como avançar. Se alguém conhecer esta ferramenta e poder me ajudar agradecia. Cumprimentos e obrigado
  9. Boas tardes pessoal, Fiz uma app em android com acesso a Webservice para gerir conteudos numa base de dados em mysql. Tenho tudo a rolar, num rasp. Quando ligo o apache em windows a app consegue resolver os nomes, no raspberry não, só em alternativa de alternar para o seu ip. Queria ver se alguma conseguiram contornar este obstaculo, digo, não quero fixar ips quero por dns. Obrigado
  10. Boas No caso de criar uma nova aplicação simples é necessário testar em vários 'devices' no Android SDK emulator ou existe algum modelo/device que consiga simular quase todos os telemóveis com o sistema android? Ps: Beginner Level
  11. Bom dia, Estou a ter alguns problemas em implementar uma pequena app para obter a meteorologia vinda das respostas do OpenWeatherMap, no entanto estou com problemas em implementar. Main Activity: public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private static final String APP_ID = "api_id"; private static final int PERMISSION_ACCESS_COARSE_LOCATION = 1; private GoogleApiClient googleApiClient; private TextView textView; private TextView textView_humidity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_COARSE_LOCATION }, PERMISSION_ACCESS_COARSE_LOCATION); } googleApiClient = new GoogleApiClient.Builder(this, this, this).addApi(LocationServices.API).build(); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case PERMISSION_ACCESS_COARSE_LOCATION: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // All good! } else { Toast.makeText(this, "Need your location!", Toast.LENGTH_SHORT).show(); } break; } } @Override protected void onStart() { super.onStart(); if (googleApiClient != null) { googleApiClient.connect(); } } @Override protected void onStop() { googleApiClient.disconnect(); super.onStop(); } @Override public void onConnected(Bundle bundle) { Log.i(MainActivity.class.getSimpleName(), "Connected to Google Play Services!"); if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); double lat = lastLocation.getLatitude(); double lon = lastLocation.getLongitude(); String units = "metric"; String url = String.format("http://api.openweathermap.org/data/2.5/weather?lat=%f&lon=%f&units=%s&appid=%s", lat, lon, units, APP_ID); new GetWeatherTask(textView).execute(url); } } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.i(MainActivity.class.getSimpleName(), "Can't connect to Google Play Services!"); } private class GetWeatherTask extends AsyncTask<Meteo, Void, Meteo> { private TextView textView; private TextView textView_humidity; public GetWeatherTask(TextView textView) { this.textView = textView; } @Override protected Meteo doInBackground(Meteo... params) { Meteo meteo = new Meteo(); String weather = "UNDEFINED"; try { URL url = new URL(params[0]); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStream stream = new BufferedInputStream(urlConnection.getInputStream()); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream)); StringBuilder builder = new StringBuilder(); String inputString; while ((inputString = bufferedReader.readLine()) != null) { builder.append(inputString); } JSONObject topLevel = new JSONObject(builder.toString()); JSONObject main = topLevel.getJSONObject("main"); meteo.temperatura = String.valueOf(main.getDouble("temp")); meteo.humidade = String.valueOf(main.getDouble("humidity")); urlConnection.disconnect(); } catch (IOException | JSONException e) { e.printStackTrace(); } return meteo; } @Override protected void onPostExecute(Meteo meteo) { textView.setText("Current Weather: " + meteo.temperatura + " ºC"); textView.setText("Current Humidity: " + meteo.humidade + " ºC"); } } } Meteo Class: * Created by Nuno on 27/11/2016. */ public class Meteo { public String temperatura; public String humidade; public String vento; public Meteo() { temperatura = ""; humidade = ""; vento = ""; } public Meteo(String tEmperatura, String hUmidade, String vEnto) { temperatura = tEmperatura; humidade = hUmidade; vento = vEnto; } public String getTemperatura(){ return temperatura; } public String getHumidade (){ return humidade; } public String getVento() { return vento; } } Basicamente o meu problema está no URL. Ou seja, aqui: Eu ainda não estou muito familiarizado com estes elementos quer URL, quer asynctasks será que me poderiam ajudar a resolver este problema? Cumprimentos
  12. Boas noite, Estou a tentar fazer uma pequena app que consiste pesquisar numa base de dados SQLite. Para a pesquisa irei usar duas formas, ou seja através do Numero ONU e através do Nome. No entanto estou a deparar-me com um problema, a app estoura no caso de se tentar pesquisar sobre algum registo que não exista. Como poderei fazer para que seja despoletada uma mensagem de erro no caso da pesquisa não encontrar um resultado? DbHelper: //Metodo ONU Query public List<Elemento> getONU() { List<Elemento> listaElementos = new ArrayList<Elemento>(); //Seleccionar Query String selectQuery = "SELECT *FROM " + TABLE_NAME + " WHERE ONU = " + MainActivity.editText_ONU_search.getText(); dbase = this.getReadableDatabase(); Cursor cursor = dbase.rawQuery(selectQuery, null); //Loop por todas as linhas da BD e adiciona-las a lista if(cursor.moveToFirst()) { Elemento element = new Elemento(); element.setID(cursor.getInt(0)); element.setONU(cursor.getInt(1)); element.setNOME_SUB(cursor.getString(2)); listaElementos.add(element); } //Return listaElementos; return listaElementos; } //Metodo Nome Query public List<Elemento> getNomeSubstancia() { List<Elemento> listaElementos = new ArrayList<Elemento>(); //Seleccionar Query String selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE NOME_SUB = '" + MainActivity.editText_NOME_search.getText() + "'"; dbase = this.getReadableDatabase(); Cursor cursor = dbase.rawQuery(selectQuery, null); //Loop por todas as linhas da BD e adiciona-las a lista if(cursor.moveToFirst()) { Elemento element = new Elemento(); element.setID(cursor.getInt(0)); element.setONU(cursor.getInt(1)); element.setNOME_SUB(cursor.getString(2)); listaElementos.add(element); } //Return listaElementos; return listaElementos; } OnuResultActivity: package com.example.nuno.materiasperigosasexample; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import com.example.nuno.materiasperigosasexample.Database.DbHelper; import com.example.nuno.materiasperigosasexample.Database.Elemento; import java.util.List; public class OnuResultActivity extends AppCompatActivity { //Declaração de variaveis List<Elemento> listaElementos; int elemento_id = 0; Elemento currentElemento; TextView textView_onu, textView_nome_sub; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_onu_result); DbHelper db = new DbHelper(this); listaElementos = db.getONU(); currentElemento = listaElementos.get(elemento_id); textView_onu = (TextView)findViewById(R.id.textView_onu); textView_nome_sub = (TextView) findViewById(R.id.textView_nome_sub); //Apresentar Info setElementosView(); } private void setElementosView() { textView_onu.setText(Integer.toString(currentElemento.getONU())); textView_nome_sub.setText(String.valueOf(currentElemento.getNOME_SUB())); elemento_id++; } } NomeResultActivity: package com.example.nuno.materiasperigosasexample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import com.example.nuno.materiasperigosasexample.Database.DbHelper; import com.example.nuno.materiasperigosasexample.Database.Elemento; import java.util.List; public class NomeResultActivity extends AppCompatActivity { //Declaração de variaveis List<Elemento> listaElementos; int elemento_id = 0; Elemento currentElemento; TextView textView_onu, textView_nome_sub; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nome_result); DbHelper db = new DbHelper(this); listaElementos = db.getNomeSubstancia(); currentElemento = listaElementos.get(elemento_id); textView_onu = (TextView)findViewById(R.id.textView_onu); textView_nome_sub = (TextView) findViewById(R.id.textView_nome_sub); //Apresentar Info setElementosView(); } private void setElementosView() { textView_onu.setText(Integer.toString(currentElemento.getONU())); textView_nome_sub.setText(String.valueOf(currentElemento.getNOME_SUB())); elemento_id++; } } Alguma ideia de como poderei retornar uma mensagem de aviso quando a pesquisa não é encontrada de forma a cobrir a possibilidade de a pesquisa inserida pelo utilizador ser não corresponder ao que está na BD. Cumprimentos Psycop
  13. Pessoal estou fazendo um trabalho com o ionic + laravel para Android e estou tendo problemas com os componentes que tem na documentação do ionic como por exemplo o componente de select, ao colocar em um ion-list um ion-item com o conteúdo: <ion-item> <ion-label>Toppings</ion-label> <ion-select [(ngModel)]="toppings" multiple="true"> <ion-option>Bacon</ion-option> <ion-option>Black Olives</ion-option> <ion-option>Extra Cheese</ion-option> <ion-option>Mushrooms</ion-option> <ion-option>Pepperoni</ion-option> <ion-option>Sausage</ion-option> </ion-select> </ion-item> Ele não mostra o resultado como no simulador da documentação do ionic, parece que falta carregar algum css ou js, pois não carrega o select, se eu colocar o conteúdo assim: <label class = "item item-input item-select"> <div class = "input-label"> Select </div> <select> <option>Option 1</option> <option selected>Option 2</option> <option>Option 3</option> </select> </label> Mostra um resultado como uma view web e não é o que quero. Minha index.html está assim: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <title></title> <link rel="manifest" href="manifest.json"> <!-- un-comment this code to enable service worker <script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('service-worker.js') .then(() => console.log('service worker installed')) .catch(err => console.log('Error', err)); } </script>--> <link href="lib/ionic/css/ionic.css" rel="stylesheet"> <link href="lib/ionic/css/ionic.min.css" rel="stylesheet"> <link href="css/style.css" rel="stylesheet"> <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above <link href="css/ionic.app.css" rel="stylesheet"> --> <!-- ionic/angularjs js --> <script src="lib/ionic/js/ionic.bundle.js"></script> <!-- cordova script (this will be a 404 during development) --> <script src="cordova.js"></script> <!-- your app's js --> <script src="js/app.js"></script> <script src="js/controllers.js"></script> </head> <body ng-app="starter"> <ion-nav-view></ion-nav-view> </body> </html>
  14. Boa tarde, Estou a tentar colocar a funcionar um projecto open-source encontrado na internet mas estou com alguns problemas ao tentar implementar as permissões para o Location agora exigidas pelo compileSdkVersion 23 e buildToolsVersion "23.0.1" que quero utilizar. O código em que estou a usar pode ser encontrado aqui: https://github.com/vyshane/rex-weather /** * Implement an Rx-style location service by wrapping the Android LocationManager and providing * the location result as an Observable. */ public class LocationService { private final LocationManager mLocationManager; public LocationService(LocationManager locationManager) { mLocationManager = locationManager; } public Observable<Location> getLocation() { return Observable.create(new Observable.OnSubscribe<Location>() { @Override public void call(final Subscriber<? super Location> subscriber) { final LocationListener locationListener = new LocationListener() { public void onLocationChanged(final Location location) { subscriber.onNext(location); subscriber.onCompleted(); Looper.myLooper().quit(); } public void onStatusChanged(String provider, int status, Bundle extras) { } public void onProviderEnabled(String provider) { } public void onProviderDisabled(String provider) { } }; final Criteria locationCriteria = new Criteria(); locationCriteria.setAccuracy(Criteria.ACCURACY_COARSE); locationCriteria.setPowerRequirement(Criteria.POWER_LOW); final String locationProvider = mLocationManager .getBestProvider(locationCriteria, true); Looper.prepare(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } mLocationManager.requestSingleUpdate(locationProvider, locationListener, Looper.myLooper()); Looper.loop(); } }); } } O meu problema está no 'this' da permissão, o qual tem como erro o seguinte: Eu não sei como colocar isto a funcionar, se alguém me puder dar uma ajuda agradecia. Cumps
  15. O DevFest Coimbra’16 é uma conferência tecnológica que se realiza no dia 3 de Dezembro, em Coimbra. Organizada pelo Google Developers Group (GDG) Coimbra, integra-se no ciclo de conferências GDG DevFest promovidas globalmente pela Google. Tem como objetivo, trazer o que melhor se faz de tecnologia ao centro de Portugal. Esta conferência é dedicada às áreas de mobile, web, design e segurança. Combina palestras, apresentadas por oradores de renome do sector tecnológico, com workshops tecnológicos, de forma a permitir o contacto direto dos participantes com a tecnologia mais recente e inovadora. O evento tem um custo associado de 5€, que revertem totalmente para a Liga Portuguesa Contra o Cancro e podem ser adquiridos: http://www2.last2ticket.com/pt/events/101/devfest-coimbra-2016. GDG Coimbra O GDG Coimbra é uma comunidade amadora de pessoas interessadas por tecnologia que se juntam para discutir ideias, desenvolver projetos, partilhar ideias (ou simplesmente beber uma cerveja, acompanhada por um nougat, o nosso “doce” atual de preferência). Entre os vários eventos organizados este ano pelo GDG Coimbra, constam: Study Jam (workshops), Developer Stories (palestras), I/O extended e Gather Hour. Redes Sociais #DevFestCbr #DevFest16 #GDGCoimbra Mais Info Site: http://devfest.gdgcoimbra.xyz Tickets: http://www2.last2ticket.com/pt/events/101/devfest-coimbra-2016 Facebook: fb.me/GDGCoimbra Google+: https://plus.google.com/+GDGCoimbra Twitter: @GDGCoimbra Email: gdgcoimbra@gmail.com
  16. Boas Estou a fazer uma série de pequenas libs para controlar alguns dispositivos Usb em Android. No entanto estou a ter alguns problemas com o comportamento dos dispositivos, com alguma instabilidade no mesmo. O mais provável é faltar-me controlar alguma coisa a nível do Usb. Alguém conhece bons tutoriais sobre como controlar dispositivos Usb, não obrigatoriamente, mas de preferência para Android?
  17. Olá pessoal comecei a desenvolver apps híbridas utilizando Ionic + Cordova tudo está indo bem. Criei uma nova aplicação ionic e fui adicionar a plataforma android com o comando: ionic platform add android. mas tive o seguinte erro: Error: Failed to find 'ANDROID_HOME' environment variable. Try setting setting it manually. Failed to find 'android' command in your 'PATH'. Try update your 'PATH' to include path to valid SDK directory. meu ~/.bashrc está assim: JAVA_HOME=/usr/lib/jvm/java-8-oracle export JAVA_HOME PATH=$PATH:$JAVA_HOME export ANDROID_HOME=/home/meuuser/Android/Sdk export ANDROID_TOOLS=/home/meuuser/Android/Sdk/tools export ANDROID_PLATFORM_TOOLS=/home/meuuser/Android/Sdk/platform-tools export PATH=${PATH}:/home/meuuser/android-sdk-linux/platform-tools export PATH=${PATH}:/home/meuuser/android-sdk-linux/tools Não sei o porque do erro. Uso o Ubuntu 16.04 64bits
  18. Bom Dia, Estou a tentar fazer uma pequena aplicação que consuma a API OpenWeatherMap mas que use a localização do dispositivo para tal, as coordenadas. Já consegui obter as coordenadas do dispositivo no entanto quando injecto essas mesmas coordenadas no URL para fazer a chamada ao serviço este não devolve informações, como se não tivessem sido introduzidas quaisquer coordenadas nos seus parametros. Será que me podem ajudar? Em baixo está o código que criei até agora: public class MainActivity extends AppCompatActivity { private LocationManager locationManager; private LocationListener listener; static float lat; static float lon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction().add(R.id.container, new WeatherFragment()).commit(); } locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); listener = new LocationListener() { @Override public void onLocationChanged(Location location) { lat = (float)location.getLatitude(); lon = (float)location.getLongitude(); //t.setText("\n " + lat + "\n" + lon); } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(i); } }; configure_button(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.weather, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == R.id.change_city){ showInputDialog(); } return false; } private void showInputDialog(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Escolher a Cidade:"); final EditText input = new EditText(this); input.setInputType(InputType.TYPE_CLASS_TEXT); builder.setView(input); builder.setPositiveButton("Go", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { changeCity(input.getText().toString()); } }); builder.show(); } public void changeCity(String city){ WeatherFragment wf = (WeatherFragment)getSupportFragmentManager() .findFragmentById(R.id.container); wf.changeCity(city); new CityPreference(this).setCity(city); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 10: configure_button(); break; default: break; } } void configure_button(){ // first check for permissions if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET} ,10); } return; } // this code won't execute IF permissions are not allowed, because in the line above there is return statement. //noinspection MissingPermission locationManager.requestLocationUpdates("gps", 5000, 0, listener); } } RemoteFetch.java public class RemoteFetch extends MainActivity{ //private static final String OPEN_WEATHER_MAP_API = "http://api.openweathermap.org/data/2.5/weather?q=%s&units=metric"; //private static final String OPEN_WEATHER_MAP_API = "http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&units=metric"; private static final String OPEN_WEATHER_MAP_API = "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&units=metric"; public static JSONObject getJSON(Context context, String city){ try { URL url = new URL(String.format(OPEN_WEATHER_MAP_API, city)); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.addRequestProperty("x-api-key", context.getString(R.string.open_weather_maps_app_id)); BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream())); StringBuffer json = new StringBuffer(1024); String tmp=""; while((tmp=reader.readLine())!=null) json.append(tmp).append("\n"); reader.close(); JSONObject data = new JSONObject(json.toString()); if(data.getInt("cod") != 200){ return null; } return data; }catch(Exception e){ return null; } } } WeatherFragment.java public class WeatherFragment extends Fragment { Typeface weatherFont; TextView cityField; TextView updatedField; TextView detailsField; TextView currentTemperatureField; TextView weatherIcon; TextView windField; Handler handler; public WeatherFragment(){ handler = new Handler(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_weather, container, false); cityField = (TextView)rootView.findViewById(R.id.city_field); updatedField = (TextView)rootView.findViewById(R.id.updated_field); detailsField = (TextView)rootView.findViewById(R.id.details_field); currentTemperatureField = (TextView)rootView.findViewById(R.id.current_temperature_field); weatherIcon = (TextView)rootView.findViewById(R.id.weather_icon); windField = (TextView)rootView.findViewById(R.id.wind_detail); weatherIcon.setTypeface(weatherFont); return rootView; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); weatherFont = Typeface.createFromAsset(getActivity().getAssets(), "weather.ttf"); updateWeatherData(new CityPreference(getActivity()).getCity()); } private void updateWeatherData(final String city){ new Thread(){ public void run(){ final JSONObject json = RemoteFetch.getJSON(getActivity(), city); if(json == null){ handler.post(new Runnable(){ public void run(){ Toast.makeText(getActivity(), getActivity().getString(R.string.place_not_found), Toast.LENGTH_LONG).show(); } }); } else { handler.post(new Runnable(){ public void run(){ renderWeather(json); } }); } } }.start(); } private void renderWeather(JSONObject json){ try { cityField.setText(json.getString("name").toUpperCase(Locale.US) + ", " + json.getJSONObject("sys").getString("country")); JSONObject details = json.getJSONArray("weather").getJSONObject(0); JSONObject main = json.getJSONObject("main"); detailsField.setText( details.getString("description").toUpperCase(Locale.US) + "\n" + "Humidity: " + main.getString("humidity") + "%" + "\n" + "Pressure: " + main.getString("pressure") + " hPa"); JSONObject wind = json.getJSONObject("wind"); //converter para km/h double wind_ms = Double.parseDouble(wind.getString("speed").toUpperCase(Locale.getDefault())); double wind_km = wind_ms * 3.6; //DecimalFormat decimal = new DecimalFormat("#.##"); //wind_km = Double.valueOf(decimal.format(wind_km)); windField.setText("Wind: " + wind_km + " Km/h "); currentTemperatureField.setText( String.format("%.2f", main.getDouble("temp"))+ " ℃"); DateFormat df = DateFormat.getDateTimeInstance(); String updatedOn = df.format(new Date(json.getLong("dt")*1000)); updatedField.setText("Last update: " + updatedOn); setWeatherIcon(details.getInt("id"), json.getJSONObject("sys").getLong("sunrise") * 1000, json.getJSONObject("sys").getLong("sunset") * 1000); }catch(Exception e){ Log.e("SimpleWeather", "One or more fields not found in the JSON data"); } } private void setWeatherIcon(int actualId, long sunrise, long sunset){ int id = actualId / 100; String icon = ""; if(actualId == 800){ long currentTime = new Date().getTime(); if(currentTime>=sunrise && currentTime<sunset) { icon = getActivity().getString(R.string.weather_sunny); } else { icon = getActivity().getString(R.string.weather_clear_night); } } else { switch(id) { case 2 : icon = getActivity().getString(R.string.weather_thunder); break; case 3 : icon = getActivity().getString(R.string.weather_drizzle); break; case 7 : icon = getActivity().getString(R.string.weather_foggy); break; case 8 : icon = getActivity().getString(R.string.weather_cloudy); break; case 6 : icon = getActivity().getString(R.string.weather_snowy); break; case 5 : icon = getActivity().getString(R.string.weather_rainy); break; } } weatherIcon.setText(icon); } public void changeCity(String city){ updateWeatherData(city); } } No entanto se injectar manualmente umas coordenadas válidas no URL obtenho a respetiva resposta do serviço, pelo que prevejo que o problema esteja na obtenção das coordenadas do dispositivo e a sua injecção on time no URL do serviço. Da a sensação que as coordenadas obtidas pelo location não estão a ser injetadas em tempo útil para o pedido do URL ao serviço. Alguém me consegue ajudar a resolver este problema? Cumprimentos
  19. Boas, Estou a desenvolver uma aplicação em Xamarin (Android) e estou com um problema relativamente ao tempo de vida da aplicação. Necessito que a aplicação que estou a desenvolver, corra no dispositivo durante vários dias (por exemplo 3, 4 ou mais). Para tal, já implementei serviços Android, que estão a fazer com que aplicação corra no dispositivo, sem parar e a executar as operações pretendidas. O problema está, no facto do utilizador executar outras aplicações no dispositivo, fazendo com que quando o mesmo, fica com pouca memória, vai matar aplicações, que estão a correr, de modo a iniciar as novas. Já tentei implementar a aplicação, como se de um GPS de trata-se (pois o Android considera estas, como de alta prioridade), mas sem sucesso! Acontecendo o mesmo, a quando da pouca memória do dispositivo. Uma opção que pensei, era na criação de um segunda aplicação que verificava se esta primeira estava a correr. E caso não, iniciava a mesma, mas não é uma opção muito prática. Gostaria de saber se alguém possui alguma outra sugestão, que possa ser útil na resolução deste problema? Ou se o que pretendo fazer, não é possível de obter, com apenas uma aplicação? Obrigado!
  20. Boas, Como posso "criar" uma app android para controlar um computador, por exemplo, através do smartphone abrir o chrome, word no computador, podem dar uma ajudinha como fazer isso...Estou a iniciar no mundo dos dispositivos móveis. Obrigado!
  21. Olá pessoal, um amigo meu comprou um telemóvel que vem com o windows phone, mas ele não curte nada e é o primeiro wp que tem, e ele preferia um android. Eu já tive a pesquisar pela net e ainda não encontrei nada. Mas sabem se é possível trocar o so do tele de windows phone para android? e se é possivel, como se faz? Obrigado
  22. O GDG DevFest Lisbon'16 é um evento promovido pelo Google Developers Group Lisbon (GDGLx) em parceria com a HackerSchool, que se realizará no próximo dia 24 de Setembro, no IST – Instituto Superior Técnico. A GDGLx é uma comunidade de developers e entusiastas de tecnologias Google que tem vindo a realizar diversas conferências, eventos, workshops tech abertos a toda a comunidade, sejam developers ou apenas curiosos, recebendo entre dezenas a centenas de pessoas. Este evento, focado em Android, mas também aberto a outras áreas como Web, Cloud, Gaming, Design e soft-skills, enquadra-se no DevFest, que se encontra dentro de uma temporada de conferências nacionais e internacionais da Google. Pretendendo acolher 100 participantes, conta com oradores bem conhecidos do sector tecnológico, como Francisco Franco (criador do popular Franco Kernel), Ivan Kutil (AppSatori), Gonçalo Silva (Todoist), Carlos Mota (Wit), Fabio Carballo (Hole19), Sérgio Almeida (Growin) e Bruno Oliveira (Faber Ventures). Para além das talks irá contemplar também um Workshop em Firebase e um Firechat, um espaço aberto à discussão entre os participantes e os speakers. É de salientar que o valor dos bilhetes será devolvido depois do evento, aos participantes que comparecerem. Se te interessas por Android, Web, Cloud, Gaming, e Design, terás certamente várias sessões que te irão interessar. Para mais informações: Site/Tickets: gdglisbon.xyz Facebook: /gdglisbon Twitter: @GDGLisbon
  23. Boa noite, Estou a desenvolver um projecto de um carro em Arduino e queria comunicar com o carro por Bluetooth. Deste modo quero fazer uma aplicação em Android para controlar o carro. Segui as instruções do site Android Developers https://developer.android.com/guide/topics/connectivity/bluetooth.html Tudo correu bem até ao momentos em que é preciso criar a Lista de dispositivos. Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); Quando faço print de pairedDevices dá-me sempre um output "0" e quando vou às definições do telemóvel consigo detectar aparelhos com o bluetooth ativo. Assim, leva-me a concluir que o problema é do código. Alguém já fez alguma aplicação que teve que usar Bluetooth? Melhores cumprimentos
  24. Boa noite, Venho pedir-vos a vossa ajuda com um problema que me deparei. Isto é para colocar um donut com o EasyPieChart. A ideia é que a legenda fique sobreposta no gráfico. No Chrome e no Firefox no windows aparece tudo correto. No Chrome no Android não. No chrome no Android, a legenda aparece sempre abaixo do gráfico. Alguma ideia? Segue o código: <div style="position: relative; text-align: center; width: 188px; height: 188px;"> <div id="chart"> <canvas></canvas> </div> <div id="chart-legend"> <span>0</span>% </div> </div> O css... #chart { position: absolute; width: 188px; height: 188px; text-align: center; font-size: 12px; } #chart canvas { position: absolute; top: 0; left: 0; } #chart-legend { position: absolute; top: 80px; left: 70px; z-index: 1; }
  25. Boas, como consigo fazer um menu settings para definir valor das variáveis da conexão com BD SQL Server (IP, etc.)? Obrigado.