1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Serviço - Android

O código, ele executa conforme ele é programado, porém, não executa a seguinte parte, que é quando o sistema operacional é reiniciado, o serviço é iniciado porém, isso acontece apenas uma vez... o resto ocorre tudo certo, porem, nesse parte quando é para ele fazer continuamente ele não faz mais o processo como é colocado no Timer... Resumindamente quando o sistema android reiniciar ele execulta apenas uma vez depois não executa mais.... alguém pode me da uma força?

Meu AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?>

Meu MainActivity.java

package br.com.phaneronsoft.alarmmanagerstartservice;

import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private final String TAG = getClass().getSimpleName();

private Context mContext = this;

private Button btnStartService, btnStopService; private TextView textViewMessage;

private ReceiverServiceProgress myReceiver;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

// Instancia os elementos btnStartService = findViewById(R.id.btnStartService); btnStopService = findViewById(R.id.btnStopService); textViewMessage = findViewById(R.id.textViewMessage);

// Seta o clique nos botoes btnStartService.setOnClickListener(this); btnStopService.setOnClickListener(this);

btnStartService.performClick(); }

@Override protected void onStart() { // Configura o receiver this.configReceiver();

Log.i(TAG, "onStart");

super.onStart(); }

@Override public void onStop() { // Remove o receiver unregisterReceiver(myReceiver);

Log.i(TAG, "onStop");

super.onStop(); }

@Override public void onClick(View view) { if (view.equals(btnStartService)) { // Inicializa o AlarmManager this.scheduleAlarmSynch();

} else if (view.equals(btnStopService)) { // Cancela o AlarmManager this.cancelAlarm(); } }

// Setup a recurring alarm every half hour public void scheduleAlarmSynch() { try { // Instancia o broadcast Intent intent = new Intent(mContext, MyAlarmManagerReceiver.class);

// Cria um PendingIntent para ser disparado quando o alarme iniciar PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, MyAlarmManagerReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// Intancia o AlarmManager AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);

// Pega o tempo atual para iniciar o servico long firstStartMillis = System.currentTimeMillis();

// Intervalo em milissegundos // Caso queira, pode usar um dos tempos disponibilizados pela lib. // Ex: AlarmManager.INTERVAL_FIFTEEN_MINUTES, AlarmManager.INTERVAL_HALF_HOUR etc long intervalMillis = (1 60 1000); // 1 minuto

// Seta a data de inicio do alarm // First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP // Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_DAY alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, firstStartMillis, intervalMillis, pendingIntent); //alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstStartMillis, intervalMillis, pendingIntent);

Log.i(TAG, "Iniciou scheduleAlarmSynch");

} catch (Exception e) { e.printStackTrace(); } }

public void cancelAlarm() { try { // Instancia o broadcast Intent intent = new Intent(mContext, MyAlarmManagerReceiver.class);

// Cria um PendingIntent para ser disparado quando o alarme iniciar PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, MyAlarmManagerReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// Intancia o AlarmManager AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);

// Cancela o schedule alarmManager.cancel(pendingIntent);

Log.i(TAG, "Cancelando AlarmManager");

} catch (Exception e) { e.printStackTrace(); } }

private void configReceiver() { try { // Instancia o receiver myReceiver = new ReceiverServiceProgress();

// Cria o filter IntentFilter filter = new IntentFilter(); filter.addAction(MyIntentService.ACTION_NOTIFY_SYNC_STATUS);

// Registra o receiver registerReceiver(myReceiver, filter);

Log.i(TAG, "configReceiver");

} catch (Exception e) { e.printStackTrace(); } }

// Recebe as notificacoes do service de sincronizacao class ReceiverServiceProgress extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Pega o texto do progresso String progress = intent.getStringExtra(MyIntentService.EXTRA_STATUS_PROGRESS);

// Valida se finalizou o progresso boolean isFinished = intent.getBooleanExtra(MyIntentService.EXTRA_IS_FINISHED, false);

Log.i(TAG, "ReceiverServiceProgress progress: " + progress);

// Valida se finalizou a sincronizacao if (isFinished) { // Seta os status na tela textViewMessage.setText(getString(R.string.label_finished));

} else { // Seta os status na tela textViewMessage.setText(progress); } } } }

Meu MyAlarmManagerReceiver.java

package br.com.phaneronsoft.alarmmanagerstartservice;

import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build; import android.support.v4.content.ContextCompat; import android.util.Log;

public class MyAlarmManagerReceiver extends BroadcastReceiver { private final String TAG = getClass().getSimpleName();

// Código da requisição. Deve ser um número único no app public static final int REQUEST_CODE = 12345;

@Override public void onReceive(Context pContext, Intent intent) { try { Log.d(TAG, "MyAlarmManagerReceiver - onReceive startService.");

// Cria o Intent Intent iService = new Intent(pContext, MyIntentService.class);

// Valida a versao do Android. A partir do 8, usar startForegroundService if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ContextCompat.startForegroundService(pContext, iService);

} else { pContext.startService(iService); }

} catch (Exception e) { e.printStackTrace(); }

} }

Meu MyIntentService.java

package br.com.phaneronsoft.alarmmanagerstartservice;

import android.app.IntentService; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.os.Build; import android.support.v4.app.NotificationCompat; import android.telephony.SmsManager; import android.util.Log; import android.widget.Toast;

import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.text.Normalizer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

/* An {@link IntentService} subclass for handling asynchronous task requests in a service on a separate handler thread. / public class MyIntentService extends IntentService { // Notificacoes de sincronizacao geral public static final String ACTION_NOTIFY_SYNC_STATUS = "br.com.phaneronsoft.alarmmanagerstartservice.ACTION_NOTIFY_SYNC_STATUS"; public static final String EXTRA_STATUS_PROGRESS = "extraStatusProgress"; public static final String EXTRA_IS_FINISHED = "extraIsFinished";

private final String TAG = getClass().getSimpleName();

private Context mContext = this;

// Progressbar private NotificationCompat.Builder mBuilder; private NotificationManager mNotifyManager; private int notificationId = 3; // Nao pode ser 0 private String mChannelId = "channel-sync"; private String mChannelName = "Sinchronization";

public MyIntentService() { super("SynchronizeIntentService"); }

@Override public void onCreate() { Log.d(TAG, "onCreate");

// Mensagem progresso sincronizacao String message = getString(R.string.msg_start_service_on_create);

// Necessário somente a partir da versão 8 do Android if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Cria notificação em foreground. Se não chamar o startForeground em até 5 segundos, será gerado um erro em tempo de execução this.showProgressNotification(message, false, true); } super.onCreate(); }

@Override protected void onHandleIntent(Intent intent) { // Mensagem progresso sincronizacao String message = getString(R.string.msg_start_service_on_handle_intent);

Log.d(TAG, message);

try { // Exibe a mensagem de inicio this.showProgressNotification(message, false, true);

// Loop para mostrar o progresso na notificacao for (int progress = 1; progress <= 150; progress++) { // Atualiza a mensagem message = getString(R.string.label_progress);

// Atualiza o progresso this.updateProgressNotification(message, progress, 150, false, true);

// Aguarda tempo para atualizar o progresso Thread.sleep(100); }

Log.d(TAG, "Finalizou processo");

} catch (Exception e) { e.printStackTrace();

Log.e(TAG, "Exception!!! " + e.getMessage());

// Pega o texto da excecao message = e.getMessage();

} finally { // Atualiza a notificacao if (mBuilder != null) { this.updateProgressNotification(message, 150, 150, true, true); } else { this.showProgressNotification(message, true, true); }

// Finaliza o servico stopSelf(); } }

@Override public void onDestroy() { Log.d(TAG, "MyIntentService - onDestroy");

super.onDestroy(); }

// Funcao para atualizar a tela do chat ao receber um push private void sendSynchronizationProgressToActivity(String progress, boolean isFinished) { // Seta o intent Intent intent = new Intent(ACTION_NOTIFY_SYNC_STATUS);

// Passa o ID do ticket para recarregar intent.putExtra(EXTRA_STATUS_PROGRESS, progress); intent.putExtra(EXTRA_IS_FINISHED, isFinished);

// Notifica o broadcast sendBroadcast(intent);

// Log.d(App.TAG_SERVICE, "Enviou - " + progress); }

private void showProgressNotification(String message, boolean isFinishedSynch, boolean isNotifyActivity) { try { // Inicializa as variaveis if (mNotifyManager == null) { mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } if (mBuilder == null) { mBuilder = new NotificationCompat.Builder(mContext, mChannelId); }

// Cancela notificacoes anteriores if (mNotifyManager != null) { mNotifyManager.cancelAll(); }

// Seta o channel na versao 8 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { NotificationChannel notificationChannel = new NotificationChannel(mChannelId, mChannelName, NotificationManager.IMPORTANCE_NONE); notificationChannel.enableVibration(false); notificationChannel.enableLights(false); mNotifyManager.createNotificationChannel(notificationChannel); }

// Seta o titulo mBuilder.setContentTitle(getString(R.string.app_name)); mBuilder.setContentText(message); mBuilder.setSmallIcon(R.mipmap.ic_launcher); mBuilder.setAutoCancel(true);

// Desabilita o som e vibracao mBuilder.setOnlyAlertOnce(true);

// Inicializa o progresso if (isFinishedSynch) { mBuilder.setProgress(150, 150, false);

} else { mBuilder.setProgress(150, 0, false); }

// Pega a notification do builder Notification notification = mBuilder.build();

// Displays the progress bar for the first time //mNotifyManager.notify(mNotificationProgressId, mBuilder.build()); startForeground(3, notification);

// Valida se eh pra notificar o receiver if (isNotifyActivity) { sendSynchronizationProgressToActivity(message, isFinishedSynch); }

} catch (Exception e) { e.printStackTrace(); } }

private void updateProgressNotification(String message, int progress, int progressTotal, boolean isFinishedProgress, boolean isNotifyActivity) { try { // Seta a porcentagem atual mBuilder.setProgress(progressTotal, progress, false); if (progress < progressTotal) { message = (message + " " + progress + " de " + progressTotal); }

// Seta a mensagem mBuilder.setContentText(message);

//mNotifyManager.notify(mNotificationProgressId, mBuilder.build()); startForeground(3, mBuilder.build());

// Valida se eh pra notificar o receiver if (isNotifyActivity) { // Notifica o receiver sendSynchronizationProgressToActivity(message, isFinishedProgress); }

} catch (Exception e) { e.printStackTrace(); } }

public void consultarDados() {

String result = ""; InputStream is = null;

try {

HttpClient httpclient = new DefaultHttpClient(); ArrayList nameValuePairsRC = new ArrayList();

nameValuePairsRC.add(new BasicNameValuePair("TIPO_OPERACAO", "S")); nameValuePairsRC.add(new BasicNameValuePair("TABELA", "C"));

HttpPost httppostRC = new HttpPost(""); httppostRC.setEntity(new UrlEncodedFormEntity(nameValuePairsRC)); HttpResponse responseRC = httpclient.execute(httppostRC);

BufferedReader readerRC = new BufferedReader(new InputStreamReader(responseRC.getEntity().getContent(), "UTF-8")); result = readerRC.readLine();

//Toast.makeText(this, "" + result, Toast.LENGTH_LONG).show();

final List> data = new ArrayList<>(); HashMap map; JSONArray jArray = new JSONArray(result); for (int i = 0; i < jArray.length(); i++) { JSONObject jsonObject = jArray.getJSONObject(i);

map = new HashMap();

//String s = formatNumber(jsonObject.getString("TX_FONE"), "55");

map.put("TX_FONE", jsonObject.getString("TX_FONE")); // map.put("TX_FONE", s); map.put("TX_SMS", jsonObject.getString("TX_SMS")); map.put("ID_CS", jsonObject.getString("ID_CS"));

//enviar o sms enviarSMS(jsonObject.getString("TX_FONE"), removeAccent(jsonObject.getString("TX_SMS")) ); //update de dados pelo id_cs updateDados(jsonObject.getString("ID_CS"));

data.add(map);

}

} catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); }

}

public void updateDados(String id_cs) {

String result = ""; InputStream is = null;

List nameValuePairs = new ArrayList(); nameValuePairs.add(new BasicNameValuePair("TIPO_OPERACAO", "U")); nameValuePairs.add(new BasicNameValuePair("TABELA", "C")); nameValuePairs.add(new BasicNameValuePair("ID_CS", id_cs));

try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://exata-software.com/SP_IUD_PETSHOPDOGJR.php");

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent();

} catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); }

}

//remover acentros e caracteres especiais public String removeAccent(final String str) { String strNoAccent = Normalizer.normalize(str, Normalizer.Form.NFD); strNoAccent = strNoAccent.replaceAll("[^\p{ASCII}]", ""); return strNoAccent; }

public void enviarSMS(String telefone, String menssagem ) { //enviar as messagem diretamente no celular particula do cliente SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(telefone, null, menssagem, null, null); //Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show();

}

@Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); return super.onStartCommand(intent,flags,startId); }

}

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android ou faça a sua própria pergunta.