Jump to content

Question

Boa noite, pessoal estou desenvolvendo um App Android que pega ( Latitude, longitude e Imei ) a cada 5 minutos e envia ao banco. até ai tudo certo, o service executa bem certinho quando o app está com a tela habilitada ou no caso está sendo utilizado, queria que o App mesmo com a tela bloqueada realize o serviço. foi criado um service, broadcastReceive.

Segue service

 

package com.example.junior.buskrastreamentogps;

import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NotificationCompat;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class service extends Service {
    int mStartMode;       // indicates how to behave if the service is killed
    IBinder mBinder;      // interface for clients that bind
    boolean mAllowRebind; // indicates whether onRebind should be used
    private Handler mHandler = new Handler();
    // Creating Volley RequestQueue.
    RequestQueue requestQueue;
    // Create string variable to hold the EditText Value.
    String ImeiHolder, LatitudeHolder,LongitudeHolder, tmpLat, tmpLon,tmpImei;
    // ENDEREÇO DO SERVIDOR E PAGINA RESPONSAVEL POR RECEBER DADOS DO APP E INSERIR NO BANCO
    String HttpUrl = "http://xxxxxxxx/inserir.php";
    /** Called when the activity is first created. */
    @TargetApi(Build.VERSION_CODES.O)
    @Override
    public void onCreate() {
        super.onCreate();
        Context context = getApplicationContext();
        //NOTIFICAÇÃO PARA O USUARIO
        String CHANNEL_ID = "my_channel_01";
        // Create the NotificationChannel, but only on API 26+ because
        // the NotificationChannel class is new and not in the support library
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = getString(R.string.app_name);
            // String description = getString(R.string.channel_description);
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            //channel.setDescription(description);
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            PendingIntent p = PendingIntent.getActivity(this, 1, new Intent(this, service.class), 0);
            notificationManager.createNotificationChannel(channel);
        }else {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(service.this, CHANNEL_ID)
                    .setSmallIcon(R.drawable.logo_busk)
                    .setContentTitle("Notificação")
                    .setContentText("Bem vindo")
                    .setPriority(NotificationCompat.PRIORITY_HIGH);
        }
        Log.d("TAG", "Serviço Criado, Notificação enviada");
        Toast.makeText(service.this, "Proteção Criada", Toast.LENGTH_SHORT).show();
        // Creating Volley newRequestQueue .
        requestQueue = Volley.newRequestQueue(service.this);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("TAG", "Comando Service inciado no OnStartComannd.");
        Toast.makeText(service.this, "Proteção Incializada", Toast.LENGTH_SHORT).show();
        Imei();
        EnviarLocalizacao.run();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String CHANNEL_ID = "my_channel_01";
            Notification.Builder builder = new Notification.Builder(service.this,CHANNEL_ID)
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText("Notificação")
                    .setAutoCancel(true);

            Notification notification = builder.build();
            startForeground(1, notification);

        } else {

            NotificationCompat.Builder builder = new NotificationCompat.Builder(service.this)
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText("Notificação")
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);

            Notification notification = builder.build();

            startForeground(1, notification);
        }
        return mStartMode;
    }
    private Runnable EnviarLocalizacao = new Runnable() {
        @RequiresApi(api = Build.VERSION_CODES.O)
        @Override
        public void run() {
            configurarServico();
            //Toast.makeText(MainActivity.this, "This is a delayed toast", Toast.LENGTH_SHORT).show();
            mHandler.postDelayed(this, 180000);
        }
    };
    private void Imei() {
        final TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)

        {
            return;
        }
        @SuppressLint("HardwareIds") final String imei = telephonyManager.getDeviceId();
        tmpImei = imei.toString();
        ImeiHolder = tmpImei.trim();
    }
    public void configurarServico() {
        try {
            final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            LocationListener locationListener = new LocationListener() {
                public void onLocationChanged(Location location) {
                    double latPoint = location.getLatitude();
                    double lngPoint = location.getLongitude();
                    tmpLat = Double.toString(latPoint);
                    tmpLon = Double.toString(lngPoint);
                    LatitudeHolder = tmpLat.trim();
                    LongitudeHolder = tmpLon.trim();
                    insert_banco();
                    Imei();
                    Toast.makeText(service.this, "Proteção Sincronizada!", Toast.LENGTH_SHORT).show();
                    locationManager.removeUpdates(this);
                }
                public void onStatusChanged(String provider, int status, Bundle extras) {
                }
                public void onProviderEnabled(String provider) { }

                public void onProviderDisabled(String provider) { }
            };
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
            locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locationListener);
        }catch(SecurityException ex){
            //Toast.makeText(service.this, "Você precisa ativar a permissão do GPS", Toast.LENGTH_LONG).show();
        }
    }
    public void insert_banco()
    {
        // Creating string request with post method.
        StringRequest stringRequest = new StringRequest(Request.Method.POST, HttpUrl,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String ServerResponse) {

                        // Showing response message coming from server.
                        //Toast.makeText(service.this, ServerResponse, Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        // Showing error message if something goes wrong.
                        //Toast.makeText(service.this, volleyError.toString(), Toast.LENGTH_LONG).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {

                // Creating Map String Params.
                Map<String, String> params = new HashMap<String, String>();

                // Adding All values to Params.
                params.put("imei", ImeiHolder);
                params.put("lat", LatitudeHolder);
                params.put("lng", LongitudeHolder);
                return params;
            }
        };
        // Creating RequestQueue.
        RequestQueue requestQueue = Volley.newRequestQueue(service.this);

        // Adding the StringRequest object into requestQueue.
        requestQueue.add(stringRequest);
    }
    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Log.d("TAG", "Serviço inciado no onStart.");
        configurarServico();

    }
    //localização
    @Override
    public IBinder onBind(Intent arg0) {

        return mBinder;
    }

}

 

autostart.png

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By brunoogm
      Pessoal estou desenvolvendo em Android Studio mas estou com o seguinte problema:
      Todos os inserts onde eu coloco alguma palavra composta ele da erro no app, porem todos os inserts com campos sem o espaço eles funcionam
       
      Ex: se eu for inserir "NOME SOBRENOME"  ele me devolve erro (com espaço)
      mas se eu inserir "NOMESOBRENOME" ele funciona normalmente (sem espaço)
       
      Ja configurei o android pra ISO 8859-1 e também pra UTF-8 mas nenhum dos dois me resolveu os problemas.
       
      Alguém tem alguma sugestão do que pode ser ?
    • By isaque_cb2
      Bom, eu estou trabalhando em um app que depende de um mapa, gps e coisas do tipo, não é nada grande, e é mais pra estudos mesmo, quero conhecer melhor essa api, mais eu não encontro nenhum tutorial do tipo, todos que encontro são antigos e têm algum erro, alguém pode me ajudar? com tutoriais, dicas, video-aulas (que ainda funcionem...) eu já reproduzi vários, mais sempre tem um erro...
       
      grato por qualquer ajuda!
    • By Hotdoug
      Tenho ao meu ponto de vista uma "boa" ideia de app para ganhar dinheiro e prêmios, mas não entendo nada sobre desenvolvimento do mesmo. 
      Gostaria de conhecer pessoas que saibam desenvolver e trocar idéias, nada mais que isso. Quem sabe possa surgir um Aplicativo reconhecido mundialmente.
    • By Motta
      Google afasta Huawei do Android. Chegou a hora do plano B?
    • By Omar~
      Bom ainda não vi um tópico similar a esse aqui no iMasters, e também não condiz com seu conteúdo bruto. Mas vim aqui porque acredito que alguém possa me dar uma luz.
      Bem possuo um Sansung j4+,  que ao realizar a gigantesca atualização para do sistema para versão 9 o telefone passou a apresentar inúmeras anomalias, como não atender ligação, não fechar aplicativos, falha em carregamentos, lentidão extrema, descarregamento da bateria em poucos minutos, além de super aquecimento entre outras sem mencionar que a interface ficou extremamente ridícula (horrível mesmo).
      Tentei localizar um lugar para reportar ou reclamar de tais problemas, mas não encontrei.
      Penso que se eu restaurar as configurações originais de fábrica ou formatar possa voltar o sistema a versão anterior (QUE FUNCIONAVA LINDAMENTE), porém me rebate nos termos de atualização que se não fazer como algumas pessoas me disseram o android pode deixar de funcionar.
      Quem está mais por dentro desse ramo poderiam me dar dicas de qual a melhor forma de proceder?
      Poque com essa versão 9 do android estou a ponto de atirar o telefone na parede de tão ruim que ele ficou.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.