Próbuję zaimplementować powiadomienia Android Direct Reply w mojej aplikacji. Udało mi się go skutecznie wdrożyć w emulatorze Android N. Ale nie działa na urządzeniach Marshmallow. Kiedy klikam przycisk akcji w powiadomieniu, odpowiedź edittext nie jest wyświetlana na urządzeniach pod Androidem N. Wiem, że ta funkcja będzie działać na urządzeniach z systemem Android N, ponieważ jest dostępna w WhatsApp.Jak sprawić, by funkcja powiadamiania o bezpośrednim dostępie do systemu Android działała na urządzeniach pre-Android N?
Moje pytanie brzmi: jak to działa na urządzeniach z Androidem N? Udostępniam tutaj mój kod. Każda pomoc byłaby świetna. Dzięki.
główną działalność
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.RemoteInput;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class MainActivity extends AppCompatActivity {
// Key for the string that's delivered in the action's intent.
public static final String KEY_TEXT_REPLY = "key_text_reply";
private static final int notificationID = 1234;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startNotif();
}
});
}
private void startNotif() {
Intent intent = new Intent(this, NotificationReciever.class);
// use System.currentTimeMillis() to have a unique ID for the pending intent
final PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);
String replyLabel = "Reply";
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
.setLabel(replyLabel)
.build();
// Create the reply action and add the remote input.
Notification.Action action =
new Notification.Action.Builder(R.drawable.ic_send,
"Action", pIntent)
.addRemoteInput(remoteInput)
.build();
// Build the notification and add the action.
Notification newMessageNotification =
new Notification.Builder(MainActivity.this)
.setSmallIcon(R.drawable.ic_remove_circle_black_48dp)
.setContentTitle("Title")
.setContentText("Content")
.addAction(action).build();
// Issue the notification.
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(notificationID, newMessageNotification);
}
}
NotificationReciever
import android.app.Activity;
import android.app.RemoteInput;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
/**
* Created by User on 13-Jun-16.
*/
public class NotificationReciever extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this,getMessageText(getIntent()),Toast.LENGTH_SHORT).show();
}
private CharSequence getMessageText(Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
return remoteInput.getCharSequence(MainActivity.KEY_TEXT_REPLY);
}
Toast.makeText(this,"Remoteinput is null",Toast.LENGTH_SHORT).show();
return null;
}
}
Czy znalazłeś odpowiedzi? – Prakash
@Prakash Próbowałem wszystkiego, ale bezpośrednia odpowiedź nie działała w wersjach poniżej Noughat. Tak jak TommyChan powiedział w poniższej odpowiedzi, będziemy musieli uruchomić działanie, które zrobi to, co chcemy, z bezpośrednią odpowiedzią, taką jak układ. Myślę, że tak to jest zrobione w WhatsApp. Popraw mnie, jeśli się mylę. :) –
@SudheeshMohan Próbuję wprowadzić to samo. Czy możesz powiedzieć, jak udało Ci się rozwiązać ten problem i jakie jest najlepsze rozwiązanie, które znalazłeś? –