2016-08-21 4 views
1

Ich habe diese Anwendung, um Benachrichtigungen zu erstellen, aber ich muss sie behalten, wenn das Smartphone einschalten/neu starten. Ich habe versucht, einen Dienst zu erstellen und die App automatisch zu starten, wenn das Smartphone eingeschaltet wird, aber nutzlos ist. Was kann ich tun?Behalten Sie Benachrichtigungen, wenn Sie das Smartphone einschalten

Dies ist der Code:

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 

import java.util.ArrayList; 


public class MainActivity extends Activity { 

Button guardar, cancelar; 
EditText nota; 
ListView lista; 
ArrayList<String> notas; 
ArrayAdapter<String> adaptador; 
NotificationManager notificationManager; 
SharedPreferences preferencias; 
SharedPreferences.Editor editor; 
int cpos; //cantidad de posiciones ya guardadas 
Intent intent; 
PendingIntent pIntent; 
Notification n; 

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

    lista = (ListView) findViewById(R.id.lista); 
    notas = new ArrayList<String>(); 
    adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, notas); 
    lista.setAdapter(adaptador); 

    preferencias = getSharedPreferences("notas", 0); 
    editor = getSharedPreferences("notas", 0).edit(); 

    cpos = preferencias.getInt("posicionesT", -1); 

    for(int i = 0; i <= cpos; i++) 
    { 
     notas.add(preferencias.getString(Integer.toString(i), "")); 
     adaptador.notifyDataSetChanged(); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 

    if(item.getItemId() == R.id.add) 
    { 
     LayoutInflater inflater = getLayoutInflater(); 
     View dialog = inflater.inflate(R.layout.nota, null); 

     guardar = (Button) dialog.findViewById(R.id.guardar); 
     cancelar = (Button) dialog.findViewById(R.id.cancelar); 
     nota = (EditText) dialog.findViewById(R.id.nota); 

     cancelar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(getApplicationContext(), MainActivity.class); 
       startActivity(i); 
      } 
     }); 

     guardar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       notas.add(nota.getText().toString()); 
       adaptador.notifyDataSetChanged(); 

       cpos++; 
       editor.putInt("posicionesT", cpos); 
       editor.putString(Integer.toString(cpos), nota.getText().toString()); 
       editor.commit(); 

       intent = new Intent(getApplicationContext(), MainActivity.class); 
       pIntent = PendingIntent.getActivity(getApplicationContext(), (int) System.currentTimeMillis(), intent, 0); 

       n = new Notification.Builder(getApplicationContext()) 
         .setContentTitle("Recordar") 
         .setStyle(new Notification.BigTextStyle().bigText(nota.getText())) 
         .setSmallIcon(R.drawable.ic_icono) 
         .setContentIntent(pIntent) 
         .setColor(Color.parseColor("#4CAF50")) 
         .setOngoing(true) //notificacion persistente 
         .addAction(R.drawable.ic_borrar, "Quitar nota", pIntent).build(); 


       notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

       notificationManager.notify(cpos, n); 
      } 
     }); 

     AlertDialog.Builder alerta = new AlertDialog.Builder(MainActivity.this); 
     alerta.setView(dialog); 
     alerta.show(); 
    } 

    return super.onOptionsItemSelected(item); 
} 

} 

Antwort

2

Benachrichtigungen sind nicht von um neu zu starten. Zu machen, was Sie wollen passieren müssen Sie

1) Schreiben Sie die Meldungen auf der Festplatte in irgendeiner Angelegenheit (gemeinsam Präferenzen, Datenbank, Datei, was auch immer), wenn Sie bekommen ein

2) Entfernen Sie sie, wenn die Benachrichtigung abgebrochen , damit Sie nicht versehentlich wieder anzeigen.

3) Schreiben Sie einen BOOT_COMPLETE-Broadcast-Empfänger. Haben Sie die gespeicherten Benachrichtigungen gelesen und neue mit den gleichen Informationen

+0

erstellt, fügen Sie nur Android: permission = "android.permission.RECEIVE_BOOT_COMPLETED"> hinzu oder erstellen Sie einen Dienst, um die Liste der gespeicherten Benachrichtigungen zu lesen. –

+0

Sie müssen die Berechtigung hinzufügen und einen BroadcastReceiver erstellen, um die Übertragung zu empfangen, und diesen Empfänger im Manifest registrieren. Sie können wählen, dass der Empfänger einen Dienst startet, aber ich glaube nicht, dass das unbedingt notwendig ist - Sie können die Verarbeitung direkt im Empfänger vornehmen. –

+0

Ok. Ich werde das versuchen. Vielen Dank! –

Verwandte Themen