728x90
Notification 설정에서 저는 주로 아래와 같은 코드처럼 Notification bar를 눌렀을 때 액티비티를 불러오는 식으로 사용합니다.
detectPendingIntent
= PendingIntent.getActivity(getApplicationContext(),
0, new Intent(getApplicationContext(),
MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(detectPendingIntent);
하지만 이 코드를 사용하니 MainActivity에서 소켓통신 중이었는데 intent로 Activity를 불러오니 onCreate를 거치게 되어서 새로 불러온 Activity는 통신이 안되고 원래의 Activity에만 통신이 되었습니다.
그래서 구글링을 통해 알아낸 방법은 moveTaskToFront를 이용하는 것입니다.
우선 Notification 설정입니다.
Intent intent = new Intent(getApplicationContext(), notificationBroadcast.class);
alarmPendingIntent
= PendingIntent.getBroadcast(getApplicationContext(),
0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(alarmPendingIntent);
그리고 수신할 BroadcastReceiver 클래스를 하나 만들어줍니다.
public class notificationBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(Integer.MAX_VALUE);
if (!tasks.isEmpty()) {
int tasksSize = tasks.size();
for (int i = 0; i < tasksSize; i++) {
ActivityManager.RunningTaskInfo taskinfo = tasks.get(i);
if (taskinfo.topActivity.getPackageName().equals(
context.getApplicationContext().getPackageName())) {
am.moveTaskToFront(taskinfo.id, 0);
}
}
}
}
}
마지막으로 AndroidManifest에 아래 코드를 추가해줍니다.
<uses-permission android:name="android.permission.REORDER_TASKS" />
<application
....
<receiver android:name=".notificationBroadcast"/>
....
</application>
이제 어플을 실행시켜보면 Notification bar을 클릭했을때 최근 실행 목록에서 어플을 실행하는 것처럼 실행중인 어플을 불러오게 됩니다.
참고자료
- https://abyser.tistory.com/80
728x90
'Programming > Android' 카테고리의 다른 글
안드로이드 스튜디오 MediaPlayer 사용하기 (0) | 2019.11.28 |
---|---|
안드로이드 스튜디오 Swipe Button 사용하기 (0) | 2019.11.28 |
안드로이드 스튜디오 Tcp 소켓통신하기(클라이언트) (23) | 2019.11.22 |
안드로이드 스튜디오 TimePickerDialog 사용하기 (0) | 2019.11.21 |
안드로이드 스튜디오 투명도 넣기 (0) | 2019.09.29 |