반응형
안드로이드에서 FCM Notification을 클릭시 특정 Fragment로 이동하는 방법입니다.
검색해서 알려진 방법으로 Fragment 이동은 되나 MainActivity가 여러개 생겨서 문제가 생기는데 이를 해결하였습니다.
AndroidAManifest.xml
우선은 MainActivity가 여러개 생기지 않게 singleTask 설정합니다.
<activity
android:name=".main.MainActivity"
android:launchMode="singleTask" />
FCMService.java
FCM 수신시 Notification 알림 부분 입니다.
Intent에 이동할 fragment가 fragment2로 이동한다고 데이타를 넣어 줍니다.
이는 MainActivity의 onCreate와 onNewIntent에서 처리 됩니다.
// Notification 알림
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("moveFragment", "fragment2");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
String chId = "myChId";
String chName = "myChName";
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notiBuilder = new NotificationCompat.Builder(this, chId)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(chId, chName, NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(channel);
manager.notify(0, notiBuilder.build());
MainActivity.java
onCreate 함수와 onNewIntent 함수에서 각각 처리해주면 됩니다.
Activity 생명주기로 살펴 보면...
앱이 실행중인 상태에서 Fragment 이동시 onNewIntent 함수가 호출되고 onCreate 함수는 호출되지 않습니다.
앱이 실행중이지 않은 상태에서는 onCreate 함수가 호출되고 onNewIntent 함수는 호출 되지 않습니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 앱이 실행중이지 않은 상태에서 Notification 알림 클릭시 이동
String extraStr = getIntent().getStringExtra("moveFragment");
if (extraStr != null) {
if (extraStr.equals("fragment2")) {
Fragment2 fragment2 = new Fragment2();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment2).commit();
}
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 앱이 실행중인 상태에서 Notification 알림 클릭시 이동
String extraStr = intent.getStringExtra("moveFragment");
if (extraStr != null) {
if (extraStr.equals("fragment2")) {
Fragment2 fragment2 = new Fragment2();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment2).commit();
}
}
}
}
반응형
'개발 - 안드로이드' 카테고리의 다른 글
안드로이드 raw 이미지 Uri 얻어오기 (0) | 2023.10.03 |
---|---|
안드로이드 ListView에 ImageView 이미지 넣기 (0) | 2023.10.03 |
안드로이드 editText 라인 수에 따른 자동 높이 조절 (0) | 2023.09.14 |
안드로이드 TabLayout 서브페이지에서 서브페이지 이동시 Tab 인덱스 변경 방법 (0) | 2023.09.11 |
안드로이드 FCM 스프링 서버에서 특정 사용자에게 notification 예제 #03 (0) | 2023.09.09 |