알림에서 활동 시작

알림에서 활동을 시작할 때 사용자의 탐색 환경을 조성하는 데 도움이 됩니다. 뒤로 버튼을 탭하면 사용자가 뒤로 이동해야 함 앱의 일반적인 워크플로를 통해 홈 화면으로 이동한 다음 최근 항목 활동을 별도의 작업으로 표시해야 합니다. 탐색 메뉴 유지 새로운 작업에서 활동을 시작할 수 있습니다.

알림의 탭 동작을 설정하는 기본 방법은 다음에 설명되어 있습니다. 기본 알림을 받을 수 있습니다. 이 페이지에서는 PendingIntent을(를) 위한 새 할 일을 생성하고 다시 돌아올 수 있습니다. 스택을 참고하세요. 실행 방법 시작하는 활동의 유형에 따라 다릅니다.

정규 액티비티
앱의 일반 UX 흐름의 일부로 존재하는 활동입니다. 날짜 사용자가 알림에서 Activity에 도착할 때 새 작업은 완전한 백 스택을 포함하여 사용자가 뒤로 버튼을 탭하여 탐색할 수 있음 앱 계층 구조 위로 올라갑니다.
특수 액티비티
사용자는 알림에서 시작할 때만 이 활동을 볼 수 있습니다. 이 액티비티는 알림 UI를 확장하는 정보를 제공하여 알림 자체에 표시하기 어렵습니다. 이 활동에는 백 스택

일반 활동 PendingIntent 설정

알림에서 일반적인 활동을 시작하려면 PendingIntent을(를) 설정하세요. TaskStackBuilder 사용 중 다음과 같이 새로운 백 스택을 생성합니다.

앱의 활동 계층 구조 정의

액티비티의 자연스러운 계층 구조를 정의하기 위해 android:parentActivityName 드림 속성을 각 <activity>에 요소를 선언할 수 있습니다. 아래 예를 참고하세요.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<!-- MainActivity is the parent for ResultActivity. -->
<activity
    android:name=".ResultActivity"
    android:parentActivityName=".MainActivity" />
    ...
</activity>

백 스택이 있는 PendingIntent 작성

활동의 백 스택이 포함된 활동을 시작하려면 TaskStackBuilder 인스턴스 및 addNextIntentWithParentStack(), 다음을 위한 Intent를 선택합니다.

설명한 대로 각 활동의 상위 활동을 정의하기만 하면 됩니다. 앞서 kubectl 명령어 getPendingIntent() 드림 전체 백 스택이 포함된 PendingIntent를 수신합니다.

Kotlin

// Create an Intent for the activity you want to start.
val resultIntent = Intent(this, ResultActivity::class.java)
// Create the TaskStackBuilder.
val resultPendingIntent: PendingIntent? = TaskStackBuilder.create(this).run {
    // Add the intent, which inflates the back stack.
    addNextIntentWithParentStack(resultIntent)
    // Get the PendingIntent containing the entire back stack.
    getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}

자바

// Create an Intent for the activity you want to start.
Intent resultIntent = new Intent(this, ResultActivity.class);
// Create the TaskStackBuilder and add the intent, which inflates the back
// stack.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(resultIntent);
// Get the PendingIntent containing the entire back stack.
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

필요한 경우 다음을 호출하여 스택의 Intent 객체에 인수를 추가할 수 있습니다. TaskStackBuilder.editIntentAt() 이는 백 스택의 활동이 실제로 로드되도록 하기 위해 사용자가 이동할 때 의미 있는 데이터를 표시합니다.

그런 다음 평소와 같이 알림에 PendingIntent를 전달할 수 있습니다.

Kotlin

val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
    setContentIntent(resultPendingIntent)
    ...
}
with(NotificationManagerCompat.from(this)) {
    notify(NOTIFICATION_ID, builder.build())
}

자바

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setContentIntent(resultPendingIntent);
...
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());

특수 활동 PendingIntent 설정

알림에서 시작되는 특수 활동은 뒤로 갈 필요가 없기 때문 다음과 같이 호출하여 PendingIntent를 만들 수 있습니다. getActivity() 하지만, 매니페스트에서 적절한 작업 옵션을 정의하세요.

  1. 매니페스트에서 다음 속성을 <activity> 요소
    android:taskAffinity=""
    또한 FLAG_ACTIVITY_NEW_TASK 플래그를 사용하지 않는 경우 이 속성을 비워두면 이 활동은 앱의 기본 작업으로 이동하지 않습니다. 모든 문자 앱의 기본 어피니티가 있는 기존 작업은 있습니다.
    android:excludeFromRecents="true"
    사용자가 다시 이동할 수 없습니다.

    예를 들면 다음과 같습니다.

    <activity
        android:name=".ResultActivity"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    </activity>
    
  2. 알림을 빌드하고 발행합니다. <ph type="x-smartling-placeholder">
      </ph>
    1. 다음을 시작하는 Intent를 만듭니다. Activity입니다.
    2. 다음과 같이 새로운 빈 작업에서 시작하도록 Activity를 설정합니다. 통화 setFlags() 플래그 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK입니다.
    3. 다음을 호출하여 PendingIntent를 만듭니다. getActivity()입니다.

    예를 들면 다음과 같습니다.

    Kotlin

    val notifyIntent = Intent(this, ResultActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    val notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
    

    자바

    Intent notifyIntent = new Intent(this, ResultActivity.class);
    // Set the Activity to start in a new, empty task.
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    // Create the PendingIntent.
    PendingIntent notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
    );
    
  3. 평소와 같이 PendingIntent를 알림에 전달합니다.

    Kotlin

    val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
        setContentIntent(notifyPendingIntent)
        ...
    }
    with(NotificationManagerCompat.from(this)) {
        notify(NOTIFICATION_ID, builder.build())
    }
    

    자바

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
    builder.setContentIntent(notifyPendingIntent);
    ...
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(NOTIFICATION_ID, builder.build());
    

다양한 작업 옵션 및 백 스택 방법에 관한 자세한 내용은 작업 및 백 스택을 참고하세요.