2016-08-21 3 views
1

У меня есть это приложение для создания уведомлений, но мне нужно сохранить их, когда смартфон включается/перезапускается. Я пытался создать сервис и автоматически запускать приложение, когда смартфон включается, но бесполезен. Что я могу сделать?Сохранять уведомления при включении смартфона

это код:

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); 
} 

} 

ответ

2

Уведомление не длится около рестарта. Чтобы сделать то, что вы хотите случиться, что вам нужно

1) Написать уведомления на диск в какой-то материи (общие предпочтения, базы данных, файл, что угодно), когда вы получаете один

2) Удалите их, когда уведомление отменяется , поэтому вы не будете перерисовываться при аварии.

3) Напишите радиовещательный приемник BOOT_COMPLETE. Прочитайте ли они сохраненные уведомления и создайте новые с той же информацией

+0

вы хотите добавить андроида: разрешение = "android.permission.RECEIVE_BOOT_COMPLETED"> или создать службу для чтения списка уведомлений, сохраненных для восстановления? –

+0

Вам необходимо добавить разрешение и создать BroadcastReceiver для приема трансляции и зарегистрировать этот приемник в манифесте. Вы можете выбрать, чтобы получатель начал сервис, но я не думаю, что это строго необходимо - вы можете обрабатывать непосредственно в приемнике. –

+0

Хорошо. Я попробую это. Благодаря! –

Смежные вопросы