android - setcontentintent - setfullscreenintent




什麼是Android PendingIntent? (12)

我是Android的新手。 我閱讀了Android文檔,但我仍然需要更多的解釋。 任何人都可以告訴我PendingIntent究竟是什麼?


Pending Intent是一個為其他應用程序提供所有權限以執行特定作品的意圖。 當主要活動被破壞時,Android操作系統會從其中取回許可。


Pending Intent是一種令牌,用於代表應用程序執行某個操作, 不管應用程序是否處於活動狀態。

我認為文檔足夠詳細: PENDINGINTENT

只需考慮Pending Intents的使用案例,如(廣播意圖,調度警報)並且文檔將變得更加清晰和有意義。


PendingIntent基本上是一個包裝另一個Intent對象的對象。 然後,它可以傳遞給外部應用程序,在該應用程序中,您授予該應用程序執行操作的權利,即執行意圖,就像從您自己的應用程序的進程(相同的許可和身份)執行一樣。 通過將PendingIntent提供給另一個應用程序,您授予它執行您指定的操作的權限,就好像另一個應用程序是您自己的一樣(具有相同的權限和標識)。


PendingIntent是Intent的包裝。 接收PendingIntent的外部應用程序不知道由PendingIntent包裝的Intent的內容。 外國應用程序的任務是在滿足某些條件時向擁有者返回意圖(例如:帶時間表的警報或點擊通知...)。 條件由所有者提供,但由外部應用程序處理(例如:警報,通知)。

如果外國應用向您的應用發送意向,則意味著外國應用知道意圖的內容。 和外國應用程序做出決定發送意圖,然後你的應用程序必須處理意圖,以滿足一些條件你的應用程序獲得系統的性能資源。


INTENT

Intents是Android中的標準消息傳遞機制,表達用戶執行一些工作的意圖。 它們允許您與其他由您或Android操作系統定義的組件進行交互。

示例廣播

  1. 一個消息
  2. 啟動相機
  3. 開始一項服務
  4. 啟動一項活動
  5. 顯示網頁或聯繫人列表
  6. 撥打一個電話號碼或接聽電話

    它們以兩種方式使用

1)由你來調用一個組件

2)由系統通知你一些事件。

創建意圖的邏輯流程通常如下:

  • 創建意圖
  • 灣 添加意圖選項 - > 例如。 我們發送給操作系統的意圖類型或與該意圖關聯的任何屬性,例如文本字符串或與意圖一起傳遞的內容
  • C。 運行意圖

現實生活中的例子:比方說,我早上起床,然後“ 打算 ”去洗手間。 我首先必須考慮去洗手間,但那不會讓我進入洗手間。 然後,我必須告訴我的大腦首先起床,然後走到洗手間,然後放開,然後去洗手,然後去擦手。 一旦我知道我要去哪裡,我發送命令開始,我的身體採取行動。

PENDINGINTENT

PendingIntent指定將來採取的操作。 它允許您將未來的Intent傳遞給另一個應用程序,並允許該應用程序執行該Intent,就好像它具有same permissions as your application ,無論您的應用程序是否仍然在最終被Intent調用的時候。允許外國應用程序允許外國應用程序使用您的應用程序的權限執行預定義的一段代碼。

通過將PendingIntent給另一個應用程序,您授予它執行您指定的操作的權限,就好像其他應用程序是您自己的一樣(具有相同的權限和標識)。 因此, you should be careful about how you build the PendingIntent :例如,您提供的基本Intent會將組件名稱明確設置為您自己的組件之一,以確保它最終會發送到那里和其他地方。

這是您想要執行的意圖操作,但是在稍後的時間。 想一想將意圖放在冰上。 它需要的原因是因為必須從應用程序中的有效Context創建和啟動Intent,但是在某些情況下,當您想要運行該操作時某個操作不可用,因為技術上它在應用程序的上下文之外兩個常見的例子是從Notification或BroadcastReceiver啟動一個Activity。通過創建一個PendingIntent來啟動,比如說,當你有Context時候(比如在另一個Activity或Service中)啟動一個PendingIntent

從現實生活的例子中繼續:比方說,我想洗澡,但我想刷牙後吃早餐。 所以我知道我不會在至少30-40分鐘之前洗澡。 我仍然在腦海中想要準備好自己的衣服,然後走上樓梯回浴室,然後脫衣服,然後淋浴。 然而,這將不會發生,直到30-40分鐘過去。 我現在有一個待辦淋浴的意圖。 這是等待30-40分鐘。

這與Pending Intent和Regular Intent之間的區別非常相似。 簡而言之:

定期意圖 - > DOES NOT REQUIRE PENDING INTENT TO BE MADE

待定意圖 - > REQUIRES A REGULAR INTENT TO BE CREATED

意圖有兩種類型 - 顯式隱式

顯式意圖 :當您的應用程序知道要調用哪個組件來執行某些操作時

隱式意圖 :當您的應用程序不知道哪個組件可以準確執行您所需的操作時。 對於Ex,如果你只是說你想顯示一個URL,那麼系統決定哪個組件會滿足這個意圖。

關於意圖的更好和清晰的想法。 鏈接下的Vist

  1. Slidenerd.com
  2. Android意向教程
  3. 多一點

PendingIntent基本上是一個包裝另一個Intent對象的對象。 然後,它可以傳遞給外部應用程序,在該應用程序中,您授予該應用程序執行操作的權利,即執行意圖,就像從您自己的應用程序的進程(相同的許可和身份)執行一樣。 出於安全原因,您應該始終將明確的意圖傳遞給PendingIntent,而不是隱式的。

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

出租車類比

意圖

意圖通常用於啟動服務。 例如:

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);

現在,此第三方將開始代表您的服務。 現實生活中的一個比喻是Uber或Lyft都是出租車公司。

您向Uber / Lyft發送乘車請求。 他們將繼續,並代表您致電其中一位司機。

因此:

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

待定意向指定將來採取的行動。 它允許您將未來的Intent傳遞給另一個應用程序,並允許該應用程序執行該Intent,就好像它具有與您的應用程序相同的權限,無論您的應用程序是否仍然在最後調用Intent時仍在其中。

這是您向外國應用程序提供的令牌,允許外國應用程序使用您的應用程序的權限執行預定義的代碼。

如果您向外國應用程序提供一個意圖,並且該應用程序發送/廣播您提供的意圖,他們將使用他們自己的權限執行該意圖。 但是,如果您將外部應用程序設為您使用自己的權限創建的待定內容,則該應用程序將使用您的應用程序的許可執行包含的Intent。

要通過掛起的意圖執行廣播,請通過PendingIntent.getBroadcast()獲取PendingIntent。 要通過掛起的意圖執行活動,您可以通過PendingIntent.getActivity()接收活動。

這是您想要執行的意圖操作,但是在稍後的時間。 想一想將意圖放在冰上。 它需要的原因是因為必須從應用程序中的有效上下文創建和啟動Intent,但是在某些情況下,當您想要運行該操作時某個操作不可用,因為技術上它在應用程序的上下文之外兩個常見的例子是從Notification或BroadcastReceiver啟動一個Activity。

通過創建一個PendingIntent,當你有上下文(你可以從另一個Activity或Service內部)創建一個PendingIntent時,你可以將這個對像傳遞給外部,以便啟動你的應用程序的一部分代表你。

PendingIntent為應用程序提供了一種工作方式,即使在他們的進程退出後也是如此。 需要注意的是,即使創建PendingIntent的應用程序已被殺死,該Intent仍可以運行。 描述要執行的Intent和目標操作。 這個類的實例是用getActivity(Context,int,Intent,int),getBroadcast(Context,int,Intent,int),getService(Context,int,Intent,int)創建的。 返回的對象可以交給其他應用程序,以便他們可以執行您以後代表您所描述的操作。

通過將PendingIntent提供給另一個應用程序,您授予它執行您指定的操作的權限,就好像另一個應用程序是您自己的一樣(具有相同的權限和標識)。 因此,您應該小心如何構建PendingIntent:例如,您提供的基本Intent會將組件名稱明確設置為您自己的組件之一,以確保它最終會發送到那里和其他地方。

PendingIntent本身就是對由系統維護的令牌的簡單描述,該令牌描述用於檢索原始數據的原始數據。 這意味著,即使其擁有的應用程序的進程被終止,PendingIntent本身仍然可以從其他被賦予的進程中使用。 如果稍後創建的應用程序重新獲取相同類型的PendingIntent(相同的操作,相同的Intent操作,數據,類別和組件,以及相同的標誌),它將會收到一個表示相同標記的PendingIntent(如果該標記仍然有效)因此調用cancel()將其刪除。


什麼是意圖?

Intent是Android中的一個特定命令,它允許您向Android OS發送命令來執行特定的操作。 把它看作是需要發生的行動。 可以執行許多操作,例如發送電子郵件,或將照片附加到電子郵件中,甚至啟動應用程序。 創建意圖的邏輯流程通常如下:a。 創建意圖b。 添加意圖選項 - >例如。 我們發送給操作系統的意圖類型或與該意圖關聯的任何屬性,例如文本字符串或與意圖一起傳遞的內容c。 運行意圖

現實生活中的例子:比方說,我早上起床,然後“打算”去洗手間。 我首先必須考慮去洗手間,但那不會讓我進入洗手間。 然後,我必須告訴我的大腦首先起床,然後走到洗手間,然後放開,然後去洗手,然後去擦手。 一旦我知道我要去哪裡,我發送命令開始,我的身體採取行動。

什麼是待定意圖?

繼續從現實生活的例子中,假設我想洗個澡,但是我想在刷牙後吃早餐後再淋浴。 所以我知道我不會在至少30-40分鐘之前洗澡。 我仍然在腦海中想要準備好自己的衣服,然後走上樓梯回浴室,然後脫衣服,然後淋浴。 然而,這將不會發生,直到30-40分鐘過去。 我現在有一個待辦淋浴的意圖。 這是等待30-40分鐘。

這與Pending Intent和Regular Intent之間的區別非常相似。 常規意向可以在沒有待定意圖的情況下創建,但是為了創建待定意向,您需要首先進行常規意向設置。


就我而言,上述答案都不是, PENDINGINTENT也沒有幫我抓住PendingIntent類的概念。

然後我發現這個視頻, Google I / O 2013, 超越藍點會議 。 在這段視頻中,前Google用戶Jaikumar Ganesh解釋了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(...)   
    }
}

未來的意圖,其他應用程序可以使用。
這裡有一個創建一個例子:

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

正如其名稱所示。PendingIntent

你可以在一段時間之後發生這種情況。 它作為其他意圖工作..它是一種將您的任務交給其他應用程序代表您執行的一種方式。





android-pendingintent