アンドロイドonNewIntent pendingIntentのアンドロイドの深い理解

pendingIntent文字通りの意味:待って、未定テント。
  pendingIntentオブジェクト、静的クラスを使用する方法:

      getActivity(Context, int, Intent, int)------->跳转到一个activity组件、

    getBroadcast(Context, int, Intent, int)------>打开一个广播组件

    getService(Context, int, Intent, int)-------->打开一个服务组件。

  目的は、第四及び第二続く3および4のパラメータ、もっと重要な第一および第三の動作に対応します。私たちは、パラメータとしてコンテキストがなければならない、あなたはパラメータとしてテントを渡す必要があり、オブジェクトを取得するには、見ることができます。

  pendingIntentはテントの特別な種類です。実行は即時ないpendingIntentながら、主な違いは、すぐに実行意向です。pendingIntent動作は実質的にインテントに渡された動作パラメータを行ったが、操作を実行するオブジェクトを使用することは、一定の条件を満たすために必要とされるインテント含まpendingIntentれます。
一次および局所使用の例:通知を送信し、ショートメッセージアラームAlarmManager Notificatio SmsManager等の送信を行います。
保留中、意図意図を意味する英語が起こるか来ることを約表します。 
このクラスは起こることを約PendingIntent物事を処理するために使用されます。例えば、でジャンプするための通知通知ページではなく、すぐにジャンプしません。 

  意図は消えるところでタイムリーなスタート、活動の意図です。 
PendingIntentは、包装の意図として見ることができるgetActivity、getBroadcast、のgetService、現在の活動や意思によってpendingintentのインスタンスを取得するには通常、その中に含まれるすぐに開始しますが、意図を呼び出し、pendingintent外で行われたときにすることはできません。正確pendingintentが存在していなくても、現在のアプリケーションの実行時の場合は、外部現在のAppアプリケーションは、テントのpendingintentの実装と同じになるように、それをアプリケーションが外部の力を与え、またの存在を通じて、現在のコンテキストのAppに保存されますので、コンテキストテント内の同じのpendingintent実装。さらなる処理操作も意図した後に行ってもよいです。そしてalermangerとnotificationmanagerはしばしば一緒に使用します。 
意図は、一般的活動、Sercvice、BroadcastReceiver、および一般通知に使用Pendingintent、の間のデータ転送に使用される、意図は、遅延実行として理解することができ、意図PendingIntentパッケージです。 

Androidのステータスバーの通知(通知)

  あなたがメッセージを確認する必要がある場合は、メッセージを表示するには、画面の一番下にあるステータスバーをドラッグすることができます。

ステップ:

  1 GET通知マネージャーNotificationManager、それはまた、システムサービスです

  2確立通知通知通知=新しい通知(アイコン、 NULL);

  図3は、新たな通知設定パラメータである(例えば、音、振動、光の点滅

  図4は、通知マネージャに新たな通知を追加しました

次のようなメッセージを送信するためのコード:

  //通知マネージャを取得します。

  NotificationManager mNotificationManager =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)

  int型アイコン= android.R.drawable.stat_notify_chat。

  長い=にSystem.currentTimeMillis(); //現在のシステム時刻の発生の通知の時間

  通知通知は=新しい通知(アイコン、 NULL); // アイコンとして新しい通知、最初のパラメータを作成し、2番目のパラメータは短いタイトルプロンプトで、通知の時刻における第3

  notification.defaults = Notification.DEFAULT_SOUND; //デフォルトのサウンドの問題

  notification.flags | = Notification.FLAG_AUTO_CANCEL、自動的に通知の通知後にクリア//クリック

  テントopenintent =新しいテント(これ、OtherActivity.class)。

  ContentIntent = PendingIntent.getActivity PendingIntent(本、0、openintentは、0); / /ときクリックメッセージシステムに送信されるopenintent意図

  notification.setLatestEventInfo(この、「タイトル」、「私は満足して」、contentIntent); // setLatestEventInfoは、通知イベントをクリックして設定を表明

  mNotificationManager.notify(0、通知); //最初のパラメータは、一意のカスタム通知を識別する

  フォーカスが上にある最後のパラメータsetLatestEventInfo()メソッド!それはPendingIntent !!!!!!!!!

  ここで使用PendingIntent(保留する意図は未定と不確かな意味で

  PendingIntentは、と見ることができるテントのパッケージ。PendingIntent情報は、主に、そのパッケージによって保持される意図と現在のアプリケーションコンテキスト。PendingIntentは、現在に格納されているの適用それを彼のプログラムを与える、コンテキストで実行される現在の実行場合でも、インテントの容量アプリケーションが存在しないだけでなく、の存在を通じてにPendingIntent コンテキスト依然として実行意図を。

 

コードをコピー
プライベートボイドshowNotify 1(){    
 2通知通知(=新しい新しい通知)    
 。3 notice.icon = R.drawable.icon;    
 4 notice.tickerText = "新しいメッセージを持っている";    
 5 notice.defaults = Notification.DEFAULT_SOUND。    
 6 notice.when = 10L;    
 7 // 100ミリ秒の遅延後に、衝撃250ミリ秒、100ミリ秒の休止、他の500ミリ秒の衝撃      
 8は//notice.vibrate =新しい長い[] { 100、250、100、500}; エラー?   
 9 //notice.setLatestEventInfo(this、 "通知"、 "会議の友人"、PendingIntent.getActivity(本、0、NULL、0));    
10 notice.setLatestEventInfo(この、 "通知"、 "会議の友人"、PendingIntent。 getActivity(この、0、新しいテント (これ、Activity2.class)、0)); // ページがジャンプは、ジャンプしようではありません   
11 NotificationManagerマネージャ=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE)。   
12 manager.notify(0、通知)。   
13}  
コードをコピー
コードをコピー
プライベートボイドshowNotify 1(){   
 2通知通知(=新しい新しい通知)   
 。3 notice.icon = R.drawable.icon;   
 4 notice.tickerText = "新しいメッセージを持っている";   
 5 notice.defaults = Notification.DEFAULT_SOUND。   
 6 notice.when = 10L;   
 7 // 100ミリ秒の遅延後に、衝撃250ミリ秒、100ミリ秒の休止、他の500ミリ秒の衝撃     
 8は//notice.vibrate =新しい長い[] { 100、250、100、500}; エラー?  
 9 //notice.setLatestEventInfo(this、 "通知"、 "会議の友人"、PendingIntent.getActivity(本、0、NULL、0));   
10 notice.setLatestEventInfo(この、 "通知"、 "会議の友人"、PendingIntent。 getActivity(この、0、新しいテント (これ、Activity2.class)、0)); // ページがジャンプは、ジャンプしようではありません  
= NotificationManagerマネージャ11(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);   
12 manager.notify(0、通知)である   
13です}  
コードをコピー
コードをコピー
1つの1. GSMネットワークメッセージは、Android例伝送
 2 
 。3 Javaコード
 4列MSG = "こんにちは、美しい";    
 。5数値文字列= "135 **** 6784";    
 6 SmsManager SmsManager.getDefault SMS =();    
 7    
 。8 PI = PendingIntent PendingIntent.getBroadcast(SmsActivity.this、0、テント新新(...)、0);    
 9 sms.sendTextMessage(番号、ヌル、MSG、PIは、null);    
10 Toast.makeText(SmsActivity.this、 "成功を送る」、Toast.LENGHT_LONG).SHOW();  
コードをコピー
コードをコピー
1つの文字列MSG = "你好、美女"。  
2列番号= "135 **** 6784"。  
3 SmsManager SMS = SmsManager.getDefault()。  
4    
5 PendingIntentのPI = PendingIntent.getBroadcast(SmsActivity.this、0、新しいインテント(...)、0);  
6 sms.sendTextMessage(番号、NULL、MSG、PI、NULL);  
7 Toast.makeText(SmsActivity.this、 "发送成功"、Toast.LENGHT_LONG).SHOW();
コードをコピー

コード説明 
      PendingIntentはテントの説明で、私たちはこの記述に基づいて、他のプログラムは、あなたが他の構成で何をすべきか、後で(別のアプリケーションにPendingIntentを与えることによって行う、他のプログラムにその記述を使用することができ 、あなたが付与されているがそれあなたが操作を実行する権利 、他のアプリケーションが自分自身であるかのように指定しているが、 PendingIntentはテントと同等のものを表しています)。この場合、別のプログラムは、テキストメッセージを送信するためのプログラムである、意思の成功が放送すべき後にテキストメッセージを送信します。 
      関数SmsManager.sendTextMessage(文字列宛先アドレス、列scAddress、文字列のテキスト、PendingIntent sentIntent、PendingIntent deliveryIntent) パラメータは、説明した: 
      1)PendingIntent sentIntentは:メッセージが発行されると、成功した意図を説明するが、その内部ブロードキャストをsendIntent、または製造します誤り訂正符号とandroid.app.PendingIntent.OnFinishedによっては、最良のパラメータは、そうでなければ無駄なリソースの潜在的な問題がある、空でない; 
      2)PendingIntent deliveryIntent:PendingIntentを行っ受信者に配信されたメッセージをブロードキャストするとき。 
      ビューPendingIntentクラスは、関連する操作を実行するSEND機能の多くであるPendingIntentが与えられている見ることができます。

PendingIntentの良い例:

 

のメッセージSmsManagerを送信するためのシステム方法をメッセージング例:

  sendTextMessage(宛先アドレス、scAddress、テキスト、sentIntent、deliveryIntent)。

  第一引数:宛先アドレス、携帯電話番号

  二番目のパラメータ:scAddress SMSセンターの番号は、通常はnullに設定されています

  第三引数:テキストメッセージの内容

  第四のパラメータは:あなたが持っていない場合は、メッセージが正常に送信されたかどうかを判断sentIntent SIMカード、またはネットワークの停止を、あなたはこれを使用することができますitentを決定します。注アクションかどうかの成功を「送る」と強調しました。彼らは別の問題を得るでしょうかするように

  5番目のパラメータ:受信者にSMSは、この受信しますdeliveryIntent時間deliveryIntentを。それは、「送信」の結果を強調しました

  つまり、「SMSが正常に送信さ」や「このメッセージ受信する相手方を活性化させるだろう」 sentIntentと2 deliveryIntent 意図を。これは、実行の遅延に相当します意向を


  上記に理解することができる二つの例、特定の条件下で行うことができるインテントPendingIntentは、それは彼が存在することができる特定の活性に依存する必要がないように、コンテキストオブジェクトを運ぶ自分の意図の利点と比較されます。

////////////////////////////////////////////////// ////////////////////////////////////////////

PendingIntentの役割、および意図との差

1、PendingIntent役割

  これは意図の遅れであることを文字通りの意味によると、主に使用され、特定のアクションの完全な実装のイベントでPendingIntentは意図とコンテキストが含まれているので、あなたのプログラムが意図終了した場合でも、PendingIntentはまだ有効で、他のプログラムで使用することができます。
一般的に通知バーやSMSシステムで使用されます。

  PendingIntentは、一般的にインスタンスへの引数として、操作後にこの例では、完全な自動実行PendingIntent作用は、また、機能を送信PendingIntentによって手動で行われてもよいし、送信後に行われる動作の成功を示すOnFinished送信機能で提供されてもよいです。

2、PendingIntent例

。システム通知バー

コードをコピー
NotificationManager NM =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)。
int型アイコン= android.R.drawable.stat_notify_chat。
長い場合=にSystem.currentTimeMillis()+ 2000; 
通知N =新しい通知(アイコン、 "通知栏デモ提醒"); 
n.defaults = Notification.DEFAULT_SOUND。
n.flags | = Notification.FLAG_AUTO_CANCEL。

テントopenintent =新しいテント(これ、DemoList.class)。
PendingIntent PI = PendingIntent.getActivity(本、0、openintent、PendingIntent.FLAG_CANCEL_CURRENT)。
n.setLatestEventInfo(この、 "通知栏デモ提醒タイトル"、 "通知栏デモ提醒テキスト"、PI); 
(0、n)はnm.notify。
コードをコピー

  setLatestEventInfoは、通知イベントをクリックして設定を表明しました

B。例のメッセージングシステム

  ブロードキャストされると二つ以上のPendingIntent sentPIとdeliveredPIが正常に送信され、相手がメッセージの成功を受け入れます

3、意図とPendingIntentの差

  。意図は、すぐに使用するためのものであり、PendingIntentは事件が引き金後まで待つことができ、キャンセルPendingIntentできる
  Bを。しばらくPendingIntent意図は、プログラムまだ有効の最後に、プログラムの終了後に終了され
  、C。PendingIntentは、コンテキスト、および意向必要としていますコンテキスト内で実行
  意向で元のタスクの実行中にD.、PendingIntentは、新しいタスクを実行します

PendingIntentは意図と最終的な動作を記述するために使用される。 
  あなたがgetActivity(コンテキストコンテキストは、int型のrequestCodeができ意図意図は、フラグINT) システムから活性PendingIntentオブジェクトを起動するために使用される方法の一連を得るために、

  getService(コンテキスト・コンテキスト、int型requestCode、意図意図、INTフラグ)によってPendingIntentのシステムからサービスオブジェクトを開始するための方法を得るために

  getBroadcast(コンテキスト・コンテキスト、int型requestCode、意図意図、フラグINT)ターゲットシステムPendingIntentからブロードキャストインテントBroadcastReceiverを得るための方法によって

  PendingIntentリターンが他のアプリケーションに提出した後、処理を続行することができます。ここでは、その後、あなただけの意図と後述の最終的な行為PendingIntentを扱うことができます。

  あなたはPendingIntentは別のプログラムに処理のために提出置くとき、PendingIntent PendingIntentはまだ(同じ権限とアイデンティティとの)元のプログラムを持っている権限を持っている。あなたはシステムからPendingIntentを取得すると、我々は非常に慎重に作業しなければなりません。テント先が独自のコンポーネント(アクティビティ/サービス/ BroadcastReceiver)であれば例えば、一般的に、あなたは、より良い、それ以外の場合はテントを終了することがあり、最終的に目的地に送られた意思を確認するためにテントのように指定した宛先コンポーネントの名前を使って表示したいです私はどこに送信するかわかりません。PendingIntentは、ここで、これらのデータを取得するために使用されるデータ(のいくつかを説明し、オブジェクト参照の、(ノード、これはLinuxまたはC \ C ++言語でなければなりません)意図と最終の振る舞いを記述トークンAndroidのシステムであり、 )。

  私は、システムから抽出されたPendingIntentにあった場合、これは、処理の偶数PendingIntent元の端部は、次いで、PendingIntent自体が他のプロセスで使用し続けることができる(他のプログラムPendingIntentに提出された)、まだそこにあることを意味するが、システムが有していますあなたが記述ピアとPendingInent PendingIntentは、その後、システムは直接PendingIntentの同じトークンPendingIntentではなく、新しいトークンとPendingIntentを返すと、実際になります。古いPendingIntentは(最初のキャンセルようにあなたが離れて)、FLAG_CANCEL_CURRENTパラメータによって、PendingIntentから取り出すときしかし、それは新しいようにして得られたpendingIntenと、そのトークンです。

  FLAG_UPDATE_CURRENTパラメータによって、新しいインテントテントオブジェクトデータは、このようなエクストラの意図を更新するよう、PendingIntent前に更新されますすることができます。また、我々はまた、システムからそれを削除するには()で元のプロセスPendingIntentでPendingIntentをキャンセル呼び出すことができます。

 

onResume()方法

リフレッシュ動作を必要とすることができたときに動作Bactivityので、データAactivityに影響を与えるので、に戻ります。
しかし、デフォルトでは、時間に戻ってインターフェースまたは最後のジャンプ。

ソリューション:用語で()onResumeでリフレッシュ動作を、onResume Aactivity()メソッドを書き換えます。活動が回復アクティビティのライフサイクルモデル、ので、onResume()メソッドが呼び出され、これはリフレッシュする良い機会です。

アンドロイドonNewIntent

1つの活動からAndroidアプリケーションの開発は、他の活動を開始し、新しい活動にいくつかのデータを渡すときには非常にシンプルですが、あなたは活動の背景とバックフォアグラウンドで実行させるいくつかのデータを渡す必要があるとき、小さな小さな存在していることがあります問題。

まず、あなたはすでに同じ活動が実行されていても、デフォルトでは、システムは活動時間を開始する意向を経て、新たな活動のインスタンスを作成し、表示されます。以下のようにアクティビティの例では、複数回のを防ぐために、我々は、シングルタスクモードを達成するために、ロードコンフィギュレーション(launchMode)のAndroidManifest.xmlを活性に必要:


1 <活動のandroid:ラベル= "@文字列/ APP_NAME" アンドロイド:launchmode = "singleTask" アンドロイド:名= "Activity1">

2 </アクティビティ>


launchModeは、システムがすでにつのインスタンスが存在する場合、システムは、このインスタンスにリクエストを送信しますが、この時、活動を開始する意向により、時間をsingleTaskし、システムは、もはや通常我々が要求されたデータを扱うのonCreateを呼び出しません次のような方法、それは、onNewIntentメソッドを呼び出します。


1保護ボイドonNewIntent(テントの意図){

2 super.onNewIntent(インテント)。

3 setIntent(意図); // getIntent(しない限り、新たな意図を格納する必要がありますが)古いものを返します。

4 processExtraData();

5}


メソッドをonNewIntent呼び出すことなく、良い解決策はのonCreateとonNewIntentで同じデータ処理方法を呼び出すことです、この問題が発生した場合、システムは方法をのonCreate呼び出します、あなたがバックグラウンドで実行されている活動を殺すために準備ができていることを忘れてはいけません方法、次のように:


01公共のボイドのonCreate(バンドルsavedInstanceState){

02 super.onCreate(savedInstanceState)。

03 setContentView(R.layout.main)。

04 processExtraData()。

05}

06  

07保護されたボイドonNewIntent(テントの意図){

08 super.onNewIntent(意図)。

09 setIntent(意図); // getIntent(しない限り、新たな意図を格納する必要がありますが)古いものを返します。

10 processExtraData()

11}

12  

13プライベートボイドprocessExtraData(){

14テント意図= getIntent()。

15 //ここで、受信したデータを使用します

16}

 

おすすめ

転載: www.cnblogs.com/Alex80/p/11519886.html