2011-12-21 12 views
1

私は私のコードでは、この例外を取得:テントのフラグとPendingIntent.getBroadcast

:あなたを介して発射される意図にフラグを設定することはできませんのようなアンドロイドのソースコードを見ると

...IllegalArgumentException...Cant use FLAG_RECEIVER_BOOT_UPGRADE here... 

は思わここで

PendingIntent.getBroadcast(...); 

Androidのソースコード:

... 
if (type == INTENT_SENDER_BROADCAST) { 
    if ((intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0) { 
     throw new IllegalArgumentException("Can't use FLAG_RECEIVER_BOOT_UPGRADE here"); 
    } 
} 
... 

ここに私のコード:

Intent myIntent = new Intent(context, MyReceiver.class); 
//myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if i remove the comment it doesn't work 
PendingIntent pending = PendingIntent. 
      getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

理由は私には明確ではないが、誰も私のためにそれをしてください明確だろうか?

答えて

4

あなたがgetBroadcast()を使用してPendingIntentを取得すると、このテントはBroadcastReceiversに放送されます。アクティビティを開始するために使用されることはありません。したがって、アクティビティ関連のフラグは設定できません。とにかくその文脈では意味をなさないでしょう。

FLAG_ACTIVITY_NEW_TASKをブロードキャストするインテントに設定したいのはなぜですか?それは意味をなさない。

Androidは3つの全く異なる目的のためにインテントを使用しています:PendingIntentクラスが異なる3を提供していますBroadcastReceiver

Service

  • 放送と通信起動/ Activity
  • とのコミュニケーション/始め

    1. これらの異なる目的のためにPendingIntentを取得するメソッド:

      1. getActivity()
      2. のgetService()
      3. getBroadcast()

      あなたが右の目的のために右の方法を使用していることを確認する必要があります。

      はい、PendingIntentを取得するためにgetActivity()を呼び出す限り、PendingIntentにActivity-related Intentフラグを設定できます。

  • +0

    デイヴィッド、それは私の悪かったです。その時私はその問題を抱えていたときに十分な注意を払わなかった。 – gwa

    関連する問題