Notification 아이콘 클릭시 특정 프래그먼트로 이동

Posted by ITPangPang
2016. 8. 2. 23:24 안드로이드(android)/알아두면 좋은것


Notification 아이콘 클릭시 

특정 프래그먼트로 이동



ㆍ 요즘은 대부분 Fragment로 화면을 구성하는 경우가 

    많습니다


ㆍ Notification에서 아이콘 클릭시 Intent로 Activity를

   열게 되는데, Fragment는 Activity안에 속해있는 경우라서

   한번 더 처리가 필요하다



Notification 코드

전체는.. 나중에

날 잡아서 보도록 하고


Intent 날리는 부분만

먼저 보도록 하겠습니다


다들 Notification 예제코드를

보셨으면 아시겠지만


일반 Intent와 PendingIent

두가지를 적어줘야 합니다.


만약 MainActivity 하나에

Fragment 여러개로 구성된

앱이라면

Intent notiIconClickIntent = new Intent(MainActivity.this, MainActivity.class);


이런식으로 Intent를 생성하겠죠


그 다음은 인텐트에서

Activity간 데이터전달을

하기 위해서


putExtra를 써줘야합니다.


오래전까진 아니지만 예전에 짧게

글 올렸던 기억이 있네요


http://Activity간 데이터전달 (putExtra, getExtras, getIntent)


이걸 이용해서 특정 Fragment로

이동시켜주시면 됩니다.

Intent notiIconClickIntent = new Intent(MainActivity.this, MainActivity.class);
notiIconClickIntent .putExtra("particularFragment", "notiIntent");

notiIconClickIntent .setAction(Intent.ACTION_MAIN);
notiIconClickIntent .addCategory(Intent.CATEGORY_LAUNCHER);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this);
stackBuilder.addParentStack(MainActivity.class);


stackBuilder.addNextIntent(notiIconClickIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
nt.setContentIntent(pendingIntent);


Intent 날리는코드도

엄청 다양하고 많더라구요..


위에 코드는

상태바(Status bar)에서

아이콘 선택시

기존에 Activity가 있던말던

Activity를 하나로 만들어서

실행시키는 코드입니다


이게 문제가 아니라

notiIconClickIntent.putExtra("particularFragment", "notiIntent")


이 부분을 보시면 되겠죠


이렇게 설정한 후에

MainActivity 코드에서

onCreate할때 위에 값을

받아주시면 됩니다


String str = getIntent().getStringExtra("particularFragment");
if(str !=null)
{
if(str.equals("notiIntent"))
{
// 해당 Fragment 실행
}
}


코드가 짧고 생각보다

어렵지 않습니다.


평소처럼 앱을 실행시켜서

onCreate에 들어갈경우 

String(str)의 값은 null 값이겟죠

그러니 if문에 안들어가게 되는데


Notification 아이콘을 터치해서

onCreate에 들어오는 경우

String(str) 값이 putExtra에서

넣어준 값으로 변경되겠죠

그러므로 if문안에 들어가게되고


그 후에 당연히

String 비교는 equals를 해서

해당 Fragment를

replace든 add든 해서

열어주시면 됩니다