APP

안드로이드(Android) Pending Intent | Notification 에서 앱으로 이동

isaac.kim 2021. 3. 10. 23:06
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
반응형