728x90
반응형
안드로이드(Android) Pending Intent | Notification 에서 앱으로 이동
Pending Intent
- Notification 메시지를 통해 애플리케이션의 Activity를 실행할 수 있는데 이 때 사용하는 것이 Pending Intent이다.
- Pending Intent를 통해 실행되는 Activity로 데이터를 전달할 수도 있다.
전체 소스코드
MainActivity.java
package kr.co.softcampus.pendingintent;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btn1Method(View view){
NotificationCompat.Builder builder = getNotificationBuilder("pending", "pending intent");
builder.setContentTitle("notification 1");
builder.setContentText("알림 메시지 1입니다");
builder.setSmallIcon(android.R.drawable.ic_menu_camera);
builder.setAutoCancel(true);
// 메시지를 터치하면 실행될 Activity 정보를 관리할 객체를 생성한다.
Intent intent1 = new Intent(this, Test1Activity.class);
// 실행될 Activity에 전달할 데이터를 셋팅한다.
intent1.putExtra("data1", "문자열 데이터1");
intent1.putExtra("data2", 100);
// 추가 액션을 설정한다.
Intent intent2 = new Intent(this, Test2Activity.class);
PendingIntent pending2 = PendingIntent.getActivity(this, 100, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
// 액션 생성을 위한 빌더 객체 생성
NotificationCompat.Action.Builder builder2 = new NotificationCompat.Action.Builder(android.R.drawable.ic_menu_compass, "Action 1", pending2);
NotificationCompat.Action action2 = builder2.build();
builder.addAction(action2);
// Intent 객체를 관리할 PendingIntent 객체를 생성하여 셋팅한다.
PendingIntent pending1 = PendingIntent.getActivity(this, 10, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pending1);
Notification notification = builder.build();
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.notify(10, notification);
}
public void btn2Method(View view){
NotificationCompat.Builder builder = getNotificationBuilder("pending", "pending intent");
builder.setContentTitle("notification 2");
builder.setContentText("알림 메시지 2입니다");
builder.setSmallIcon(android.R.drawable.ic_menu_camera);
builder.setAutoCancel(true);
// 메시지를 터치하면 실행될 Activity 정보를 관리할 객체를 생성한다.
Intent intent1 = new Intent(this, Test2Activity.class);
// Intent 객체를 관리할 PendingIntent 객체를 생성하여 셋팅한다.
PendingIntent pending1 = PendingIntent.getActivity(this, 10, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pending1);
Notification notification = builder.build();
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.notify(20, notification);
}
public NotificationCompat.Builder getNotificationBuilder(String id, String name){
NotificationCompat.Builder builder = null;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH);
channel.enableLights(true);
channel.setLightColor(Color.RED);
channel.enableVibration(true);
manager.createNotificationChannel(channel);
builder = new NotificationCompat.Builder(this, id);
} else {
builder = new NotificationCompat.Builder(this);
}
return builder;
}
}
Test1Activity.java
package kr.co.softcampus.pendingintent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class Test1Activity extends AppCompatActivity {
// 뷰의 주소 값을 담을 참조변수
TextView text2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test1);
// 뷰의 주소 값을 받는다.
text2 = (TextView)findViewById(R.id.textView2);
// 액티비티를 실행할 때 사용한 인텐트 객체를 추출한다.
Intent intent = getIntent();
// 데이터를 추출한다.
String data1 = intent.getStringExtra("data1");
int data2 = intent.getIntExtra("data2", 0);
text2.setText("data1 : " + data1 + "\n");
text2.append("data2 : " + data2);
}
}
Test2Activity.java
package kr.co.softcampus.pendingintent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class Test2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test2);
}
}
Action
- 알림 메시지에 버튼과 같은 것을 배치하여 눌렀을 때 지정된 Activity를 실행할 수 있다.
- 안드로이드 4.1 이후 부터 하나의 메시지를 통해 여러 Activity를 실행할 수 있도록 제공된다.
정리
Notification에 Pending Intent를 설정하면 애플리케이션의 Activity를 실행할 수 있다.
728x90
반응형