管理者がメッセージを投稿するとすぐに通知を送信したいと考えました。メッセージがAndroidに投稿されたときに通知をユーザーに送信する方法
私が現在直面している:
- 私はアプリを開くたびに、通知音は全く新しいメッセージがないにもかかわらず到着する(コードは
onCreate()
方法で書かれているので、それはありますか?) - 通知をクリックすると、
MainActivity
に正しくリダイレクトされ、通知音が再び表示されます。迷惑なのは、その種:(
私はaddChildEventListener
に通知コードを書きました。誰もが、上記のものを固定で私を導くことができる。私の次のコードを確認してください。
コードを私のアプリのMainActivity
ため。
public class MainActivity extends AppCompatActivity {
...
// [Start of onCreate Method]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
// NOTIFICATIONS
mBuilder =
(NotificationCompat.Builder) new NotificationCompat.Builder(MainActivity.this)
.setSmallIcon(R.drawable.bcm_logo)
.setContentTitle("BCM")
.setDefaults(Notification.DEFAULT_SOUND)
.setContentText("You have a new message")
.setAutoCancel(true); // clear notification when clicked
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
mBuilder.setContentIntent(pi);
messagesDatabaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, "Child ADDED !");
Log.d(TAG, "D: " + dataSnapshot);
mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(mNotificationId, mBuilder.build());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, "Child Changed");
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.d(TAG, "CHILD REMOVED!");
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, "Child Moved");
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "Child Cancelled");
}
});
} // [End of onCreate Method]
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "User Signed in");
} else if (resultCode == RESULT_CANCELED) {
finish();
}
}
}
...
// WHAT IF SIGNED IN
private void onSignedInitialize(String userDisplayName) {
mUserName = userDisplayName;
Message.setSenderName(mUserName);
attachDatabaseReadListener();
}
// ATTACH AND DETACH THE DATABASE READ LISTENERS
private void attachDatabaseReadListener() {
if (childEventListener == null) {
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Message message = dataSnapshot.getValue(Message.class);
mMessageAdapter.add(message);
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(DatabaseError databaseError) {
}
};
messagesDatabaseReference.addChildEventListener(childEventListener);
}
}
...
} // [END of Main Activity]
、それは(、第二の場合:(message.getCreationTimeをうまくいかなかった)であります私の** LogCat **: 'In Model TIME IN MS:1499297543427; MSでのアタッチ時間:1499297696644' – Chip
それはうまくいかなかったのですが、何が起こっているのですか?あなたが参照しているデータ?この行について '//ここにあなたのデータを使用する ' – Chip
もっとデータを提供できるなら何が機能していないのかについての情報があります。たとえば、コメントをあなたのコードに置き換えることができます: 'mMessageAdapter.add(message);' – arnoduebel