2017-08-25 3 views
-1

Ich erstelle eine Taxi App. Wann immer ein Passagier eine Fahrt anfordert, wird die Anfrage vom Server bearbeitet und ein Taxifahrer wird benachrichtigt. Die Treiber-App enthält eine Aktivität mit einem Alarm, der beim Empfang der FCM-Benachrichtigung zu klingeln beginnt. FCM funktioniert gut, wenn sich die App im Vordergrund befindet. Die Alarmaktivität wird jedoch nicht gestartet, wenn sich die App im Hintergrund befindet oder sich im Status "Geschlossen" befindet. Gibt es eine Möglichkeit, die geplante ausstehende Absicht aus der Benachrichtigung zu starten, selbst wenn die App im Hintergrund läuft?Starten Sie eine Aktivität beim Klicken auf die Benachrichtigung, wenn die App im Hintergrund ist oder vollständig geschlossen ist.

Intent intent = new Intent(this, AlarmActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.alert) 
      .setContentTitle("Firebase Push Notification") 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0, notificationBuilder.build()); 

Antwort

0

Verwenden Sie BroadcastReciever für diesen Zweck.

public class Alarm extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, ""); 
    wl.acquire(); 


    Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

    intent = new Intent(); 
    intent.setClass(context, Test.class); //Test is a dummy class name where to redirect 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.putExtra("msg","Task Pending"); 
    context.startActivity(intent); 
    wl.release(); 
} 

und in Ihrer Testaktivität den Alarm auslösen, wie Sie möchten.

public class Test extends AppCompatActivity { 

private Ringtone r; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    setContentView(R.layout.activity_alarm); 
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    r = RingtoneManager.getRingtone(this, notification); 
    r.play(); 

    ImageView buttonCancelAlarm = (ImageView) findViewById(R.id.buttonCancelAlarm); 

    buttonCancelAlarm.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      cancelAlarm(Test.this); 
      finish(); 
     } 
    }); 

} 
public void cancelAlarm(Context context) 
{ 
    r.stop(); 
    Intent intent = new Intent(context, Alarm.class); 
    PendingIntent sender = PendingIntent.getBroadcast(context, 12345, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
} 

ich hoffe es hilft.

Verwandte Themen