source

Android Pending이란 무엇입니까?의도?

manysource 2023. 6. 14. 21:56

Android Pending이란 무엇입니까?의도?

Android 설명서를 읽었지만 여전히 좀 더 명확한 설명이 필요합니다.A가 정확히 무엇입니까?

A PendingIntent하는 토큰입니다(예: 에제에토는큰공램하프토큰).NotificationManager,AlarmManager 화면 홈린크AppWidgetManager또는 다른 타사 응용 프로그램)을 사용하여 외부 응용 프로그램이 미리 정의된 코드 조각을 실행할 수 있도록 합니다.

외부 응용 프로그램에 Intent를 지정하면 실행됩니다.Intent독자적인 허가가 있어야 합니다.하지만 만약 당신이 외국어 지원서를 준다면,PendingIntent은 당신의 해당응프실행다니합이램그를 할 것입니다.Intent응용 프로그램의 권한을 사용합니다.

보류 중인 이유의도가 필요합니까?저는 이렇게 생각하고 있었어요.

  1. 할 수 이유는 입니까?Intent또는
  2. 는 단순한 할 수 요?Intent같은 목적으로

Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

내가 보낸다면,bluetoothIntent에 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜandroid.permission.BLUETOOTH_ADMIN수신 응용 프로그램이 Bluetooth를 활성화할 수 없습니다.startActivity(bluetoothIntent).

이 제한은 다음을 사용하여 극복됩니다.PendingIntent.와 함께PendingIntent 수애리케션이, 없음요플이 .android.permission.BLUETOOTH_ADMINBluetooth를 활성화합니다.출처.

Pending Intent는 응용 프로그램 프로세스의 활성화 여부에 관계없이 응용 프로그램을 대신하여 작업을 수행하기 위해 일부 응용 프로그램에 제공하는 토큰입니다.

문서는 충분히 상세하다고 생각합니다: Pending Intent docs.

(Broadcasting Intents, Scheduling Alarm)과 같은 Pending Intents의 사용 사례를 생각하면 문서가 더 명확하고 의미 있게 될 것입니다.

저의 경우, 위의 답변이나 구글의 공식 문서 중 어떤 것도 제가 개념을 이해하는 데 도움이 되지 않았습니다.PendingIntent학생들

그리고 구글 I/O 2013이라는 비디오를 찾았습니다. Beyond the Blue Dot 세션입니다.이 비디오에서 전 구글 사용자인 자이쿠마르 가네쉬는 다음과 같이 설명합니다.PendingIntent그리고 그것이 제게 이것의 큰 그림을 준 것입니다.

아래는 위의 비디오(15:24부터)를 전사한 것입니다.

그럼 보류 중인 의도는 무엇입니까?

이 토큰은 앱 프로세스가 위치 프로세스에 제공하는 토큰이며, 관심 이벤트가 발생할 때 위치 프로세스가 이 토큰을 사용하여 앱을 깨웁니다.따라서 기본적으로 백그라운드에서 앱이 항상 실행될 필요는 없습니다.흥미로운 일이 생기면, 우리는 당신을 깨울 것입니다.이것은 배터리를 많이 절약합니다.

이 설명은 이 코드 조각(세션 슬라이드에 포함됨)을 통해 더욱 명확해집니다.

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}

보류 의도는 미래의 어느 시점에서 시작될 의도입니다.정상적인 의도는 전달될 때 즉시 시작됩니다.startActivity(Intent)또는StartService(Intent).

택시 비유

의도

일반적으로 서비스를 시작하는 데 사용됩니다.예:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

이것은 당신이 택시를 부를 때와 같습니다.

Myself = CurrentClass
Taxi Driver = ServiceClass

보류 중인 의도

다음과 같은 방법을 사용해야 합니다.

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

이제 이 제3자가 귀하를 대신하여 서비스를 시작합니다.실제 비유는 둘 다 택시 회사인 Uber 또는 Lyft.

Uber/Lyft로 승차 요청을 보냅니다.그런 다음 그들은 당신을 대신하여 운전자 중 한 명에게 전화를 걸 것입니다.

따라서:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass

의도란?

Intent는 Android OS에 특정 작업을 수행하는 명령을 전송할 수 있는 Android의 특정 명령입니다.그것이 일어나야 할 행동이라고 생각하세요.전자 메일을 보내거나 전자 메일에 사진을 첨부하거나 응용 프로그램을 실행하는 등 여러 가지 작업을 수행할 수 있습니다.의도를 생성하는 논리적 워크플로우는 일반적으로 a와 같습니다.의도 b를 만듭니다.인텐트 옵션 추가 -> 예. OS에 보내는 인텐트 유형 또는 텍스트 문자열 또는 인텐트와 함께 전달되는 것과 같은 해당 인텐트와 관련된 속성 c. 인텐트 실행

실제 사례:제가 아침에 일어나서 화장실에 간다고 가정해 보겠습니다.저는 우선 화장실에 가는 것에 대해 생각해야 할 것이지만, 그렇다고 해서 화장실에 가는 것은 아닙니다.그리고 나서 저는 제 뇌에게 먼저 침대에서 일어나라고 말하고, 화장실로 걸어가, 그리고 나서 손을 씻고, 그리고 나서 손을 닦으라고 말해야 할 것입니다.제가 어디로 가는지 알게 되면 저는 명령을 보내고 제 몸은 행동을 취합니다.

보류 중인 의도란?

실생활의 예를 이어서, 샤워를 하고 싶지만 양치질을 하고 아침을 먹고 난 후에 샤워를 하고 싶습니다.그래서 적어도 30분에서 40분까지는 샤워를 하지 않을 것이라는 것을 알고 있습니다.저는 아직도 머리 속에 옷을 준비해야 한다는 생각이 들어요. 그리고 나서 계단을 걸어서 화장실로 돌아갔다가 옷을 벗고 샤워를 합니다.그러나 이 작업은 30-40분이 경과할 때까지 수행되지 않습니다.저는 이제 샤워할 보류 중입니다.30-40분 동안 보류 중입니다.

그것은 보류 중인 의도와 일반 의도의 차이입니다.보류 중인 의도 없이 일반 의도를 만들 수 있지만 보류 중인 의도를 만들려면 먼저 일반 의도를 설정해야 합니다.

다른 앱이 사용할 수 있는 미래의 의도입니다.
다음은 생성을 위한 예제입니다.

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);

보류 중의도는 다른 응용 프로그램(예: Notification Manager, Alarm Manager 또는 기타 타사 응용 프로그램)에 제공하는 토큰으로, 이 다른 응용 프로그램은 사용자 응용 프로그램의 권한을 사용하여 미리 정의된 코드를 실행할 수 있습니다.보류 중인 의도를 통해 브로드캐스트를 수행하려면 보류 중입니다.보류 중을 통한 의도Intent.getBroadcast().보류 중인 의도를 통해 활동을 수행하려면 보류 중을 통해 활동을 수신합니다.Intent.getActivity()입니다.

PendingIntent기본적으로 다른 것을 감싸는 물체입니다.Intent그런 해당 하는 권한(및 ID될 수 .그런 다음 해당 앱에 작업을 수행할 권한, 즉 자신의 앱 프로세스(동일한 권한 및 ID)에서 실행된 것처럼 의도를 실행할 권한을 부여하는 외부 응용 프로그램으로 전달될 수 있습니다.은 항상 Pending에게 명시적인 의도를 .암시적이기보다는 의도적입니다.

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);

보류 중인텐트는 일반 인텐트를 사용자의 허가를 받아 실행할 수 있도록 외부 앱에 제공하는 토큰으로 래핑합니다.예:

음악 앱의 알림이 음악을 재생/일시 중지할 수 없습니다.PendingIntent의 음악 에 "Music App"이 있기 때문에 방송을 보냅니다.READ_EXTERNAL_STORAGE알림 앱이 허용하지 않는 권한.알림은 시스템 서비스이므로 외부 앱입니다.

보류 중인 의도는 이후에 수행할 액션을 지정합니다.이 기능을 사용하면 다른 응용프로그램에 미래의 의도를 전달하고 응용프로그램이 사용자의 응용프로그램과 동일한 권한을 가진 것처럼 해당 응용프로그램이 의도가 실행될 때 응용프로그램이 계속 존재하는지 여부에 관계없이 해당 의도를 실행하도록 허용할 수 있습니다.

외부 응용 프로그램이 응용 프로그램의 권한을 사용하여 미리 정의된 코드 조각을 실행할 수 있도록 허용하는 외부 응용 프로그램에 제공하는 토큰입니다.

외부 응용프로그램에 의도를 부여하고 해당 응용프로그램이 사용자가 지정한 의도를 전송/브로드캐스트하는 경우, 해당 응용프로그램은 자신의 권한으로 의도를 실행합니다.그러나 사용자 자신의 권한을 사용하여 작성한 보류 중인 의도를 외부 응용프로그램에 부여하는 경우 해당 응용프로그램은 응용프로그램의 권한을 사용하여 포함된 의도를 실행합니다.

보류 중인 의도를 통해 브로드캐스트를 수행하려면 보류 중입니다.보류 중을 통한 의도Intent.getBroadcast().보류 중인 의도를 통해 활동을 수행하려면 보류 중을 통해 활동을 수신합니다.Intent.getActivity()입니다.

나중에 수행하려는 의도 작업입니다.얼음 위에 의도를 두는 것이라고 생각하세요.이것이 필요한 이유는 응용프로그램의 유효한 컨텍스트에서 인텐트를 생성하고 실행해야 하기 때문입니다.그러나 사용자가 기술적으로 응용프로그램의 컨텍스트 밖에 있기 때문에 작업을 실행할 때 작업을 사용할 수 없는 경우가 있습니다(두 가지 일반적인 예는 알림 또는 브로드캐스트 수신기에서 작업을 시작하는 것입니다).

보류 중인 항목을 통해예를 들어 컨텍스트가 있는 동안(다른 활동 또는 서비스 내부에서) 활동을 시작하는 데 사용하려는 의도는 해당 개체를 외부의 다른 개체로 전달하여 사용자 대신 응용프로그램의 일부를 실행할 수 있도록 할 수 있습니다.

보류 중의도는 프로세스가 종료된 후에도 응용프로그램이 작동할 수 있는 수단을 제공합니다.Pending(보류)을 생성한 응용 프로그램 이후에도 주의해야 합니다.인텐트가 제거되었지만 인텐트는 계속 실행할 수 있습니다.의도 및 이를 사용하여 수행할 대상 작업에 대한 설명입니다.이 클래스의 인스턴스는 getActivity(Context, int, Intent, int), getBroadcast(Context, intent, int), getService(Context, intent, int)로 생성되며, 반환된 개체는 나중에 사용자를 대신하여 설명한 작업을 수행할 수 있도록 다른 응용 프로그램에 전달될 수 있습니다.

보류 중을 지정함다른 응용 프로그램에 대해 사용자는 다른 응용 프로그램이 사용자 자신인 것처럼 지정한 작업을 수행할 수 있는 권한을 부여합니다(동일한 사용 권한 및 ID).따라서 Pending을 빌드하는 방법에 주의해야 합니다.의도: 예를 들어, 제공하는 기본 의도의 경우 구성 요소 이름이 사용자 자신의 구성 요소 중 하나로 명시적으로 설정되어 궁극적으로 다른 곳으로 전송되지 않도록 합니다.

보류 중인텐트 자체는 단순히 시스템에서 관리하는 토큰을 참조하는 것으로, 이 토큰을 검색하는 데 사용된 원래 데이터로 설명합니다.즉, 소유 애플리케이션의 프로세스가 중지되더라도 보류 중입니다.의도 자체는 주어진 다른 프로세스에서도 사용할 수 있습니다.생성 응용 프로그램이 나중에 동일한 종류의 보류 중을 다시 검색하는 경우의도(동일한 작업, 동일한 의도 작업, 데이터, 범주 및 구성 요소, 동일한 플래그)는 보류 중인 메시지를 수신합니다.여전히 유효한 경우 동일한 토큰을 나타내는 의도이므로 취소()를 호출하여 제거할 수 있습니다.

운말로하면쉬,면쉬,
수행할 의도 및 대상 작업에 대한 설명입니다.먼저 의도를 만든 다음 실행할 특정 Java 클래스를 의도로 전달해야 합니다.
수 ..get Activity, 보중Intent ActivitiesIntent.get (, intent[], int), 중류보Intent) 및 .getBroadcast(콘텍스트, int, intent, int) 및중보Intent intent,Intent.getService(Context, int, intent, int); 1단계 가 나와 .
명심해야 할 것은...보류 중을 지정함다른 응용 프로그램에 대해 지정한 작업을 수행할 수 있는 권한을 부여하는 것입니다.

그것이 제가 오랜 독서 끝에 배운 것입니다.

간단히 말하면

A pending intent으로 기적으다앱른서이전비수의있다도니입는달과 같은 다른 할 수 입니다.notification manager,alarm manager등의 작업을 수행하기에 적합한 타이밍/시간을 처리하도록 합니다.

그 이름에서 알 수 있듯이...보류 중의도

당신은 그것을 보류할 수 있습니다. 그것은 다른 의도로 작용합니다. 그것은 당신을 대신하여 수행하기 위해 당신의 작업을 다른 앱에 주는 방법입니다.

보류 중인 의도

보류 중인 의도는 다른 응용 프로그램에서 사용하도록 설계된 일반 의도 주위의 래퍼입니다.

이는 다른 응용프로그램이 사용자의 응용프로그램이 부여한 모든 권한과 함께 사용자의 응용프로그램과 마찬가지로 포함된 작업을 수행할 수 있는 기능을 제공합니다.

나중에 활동/서비스/브로드캐스트 수신기와 같은 일부 응용 프로그램 구성 요소를 열거나 지정된 시간 간격 후에 Pending을 전송해야 합니다.이 경우의 의도.이는 사용자를 대신하여 프로그램 코드를 실행하기 위해 다른 앱에 제공한 권한 전표와 같은 역할을 합니다.보류 중의도는 다른 프로세스의 다른 앱인 AlarmManager를 원하는 것처럼 프로세스 경계를 넘어 작동하며 보류 중으로 지정된 앱에 대해 AlarmManager가 작업을 수행합니다.의도

Pending Intent는 특정 작업을 수행할 수 있는 모든 권한을 다른 응용 프로그램에 제공하는 의도입니다.기본 활동이 삭제되면 Android OS는 해당 활동에서 권한을 회수합니다.

Pending을 발견했습니다.알림의 의도입니다.여기 간단한 설명이 있습니다.

알림 의도를 제공하려고 합니다. 이 경우 카메라 캡처 기능을 수행하는 활동을 엽니다.여기서 단순히 인텐트를 통과하면 내 앱이 매니페스트에 이 권한을 가지고 있지만 Notification Manager는 이 권한을 가지고 있지 않습니다. 이로 인해 Notification Manager는 이 권한을 가지고 있지 않으므로 작업이 작동하지 않습니다.

그러나 보류 중을 사용하는 경우의도: 여기서 내 앱이 가진 권한은 Notification Manager 대신 사용됩니다.따라서 Notification Manager에 Camera 권한이 없고 내 앱에 카메라 권한이 있더라도 활동을 열고 앱을 수행합니다.

참고: 보류 중인 의도를 먼저 설정해야 합니다.

언급URL : https://stackoverflow.com/questions/2808796/what-is-an-android-pendingintent