안녕하세요, 저는 Firebase Cloud Messaging을 사용중인 앱을 개발 중입니다. 그러나 나는 데이터 메시지가있는 알림을받을 때 사용자가보고 싶지 않은 상황이 있습니다. 나는 myFirebaseMessagingService에서 sendNotification 함수를 삭제하는 것으로 해결했지만 내 앱이 포 그라운드에있는 경우에만 작동합니다. 내 질문은 : 응용 프로그램이 백그라운드에서 알림을 시스템 트레이에 오면 알림 아이콘이 표시되지 않도록 코드를 설정하는 방법은 무엇입니까?시스템 트레이에서 알림 표시를 비활성화하는 방법은 무엇입니까?
여기 내 MainActivity입니다 :
public class MainActivity extends AppCompatActivity {
Button dugme, dugme2, dugmeBaza, dugmeToken;
DataBaseHelper db;
Cursor c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("onCreate", "ONCREATE");
db=new DataBaseHelper(this);
final Intent intent=getIntent();
setContentView(R.layout.activity_main);
String msg = getIntent().getStringExtra("click_action");
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (msg != null)
{
Log.d("MSG", msg);
if (msg.equals("goToFragment1")) {
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.replace(R.id.myFragment, fragment1);
Log.d("FragmentTransaction", "Fragment je promenjen u onCreate!");
fragmentTransaction.commit();
Log.d("Create", "Kraj onCreatea");
}
}
dugme = (Button) findViewById(R.id.dugme1);
dugme2 = (Button) findViewById(R.id.subscribe);
dugme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Fragment fragment = null;
if (view == dugme) {
fragment = new Fragment1();
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.myFragment, fragment);
transaction.addToBackStack(null);
transaction.setTransition(FragmentTransaction.TRANSIT_NONE);
transaction.commit();
}
});
dugme2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseMessaging.getInstance().subscribeToTopic("android");
Log.d("Log", "Uspesno ste se pretplatili");
}
});
dugmeBaza=(Button)findViewById(R.id.dugmeZabazu);
viewAll();
dugmeToken=(Button)findViewById(R.id.TokenButton);
dugmeToken.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d("TOKEN", "Refreshed token: " + refreshedToken);
}
});
@Override
protected void onPause() {
super.onPause(); // Always call the superclass method first
Log.d("onPause", "Pauza");
}
public void viewAll(){
dugmeBaza.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cursor res= db.getAlldata();
if(res.getCount()==0) {
//show message
showMessage("Error", "Nothing found");
return;
}
StringBuffer buffer=new StringBuffer();
while (res.moveToNext()){
buffer.append("Id: " + res.getString(0) + "\n");
buffer.append("poruka: " + res.getString(1));
}
showMessage("Data", buffer.toString());
}
});
}
public void showMessage(String title, String message){
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(message);
builder.show();
}
public void Ubaci(){
String msg=getIntent().getStringExtra("poruka");
db.insertMsg(msg);
}
그리고 여기 myFirebaseMessagingService입니다 :
public class myFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG="MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("onMessageReceived", "Pozvana funkcija onMessageReceived");
Log.d(TAG, "From " + remoteMessage.getFrom());
Log.d(TAG, "Body " + remoteMessage.getNotification().getBody());
Log.d(TAG, "Location " + remoteMessage.getNotification().getClickAction());
Log.d(TAG, "Value " + remoteMessage.getData().get("click_action"));
올바르게 이해하면 발신자 (내 경우 앱 서버)가 안드로이드에서 나 아닌 알림 아이콘이 표시 될지 결정합니다. 내 작업은 안드로이드 장치에서 FCM 연결을 제공하는 것입니다. – Atenica
그것이 지금 그것이 어떻게되었는지입니다. 발신자 서버에 제공하는 추가 기능입니다. 서버가 "데이터"만 보내면 알림을 표시할지 여부를 앱에서 결정할 수 있습니다. –
그래도 서버에서 데이터 만 보내는 경우 알림을 표시하려면 앱에서 어떻게 결정할 수 있습니까? – Atenica