2016-08-21 8 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を取得するときに、何でも))、それらを削除し、共有設定、データベース、ファイルをディスクへの通知を書く)あなたは

1に必要起こる欲しいものを作るために、あなたは事故で再表示されません。

3)BOOT_COMPLETEブロードキャスト受信機を作成します。保存されている通知を読み込んで同じ情報で新しい通知を作成しますか?

+0

あなたはandroid:permission = "android.permission.RECEIVE_BOOT_COMPLETED">のみを追加するか、復元するために保存された通知のリストを読むサービスを作成していますか? –

+0

ブロードキャストを受信し、その受信者をマニフェストに登録するには、アクセス許可を追加してBroadcastReceiverを作成する必要があります。受信機にサービスを開始させることもできますが、それは厳密には必要ではないと思います。受信機で直接処理を行うことができます。 –

+0

私はそれを試みます。ありがとう! –

関連する問題