2016-11-16 4 views
0

J'utilise un récepteur de diffusion avec plusieurs filtres d'intention. Mon exigence est d'accéder au clic de notification et de faire un travail avec ce clic en arrière-plan (si l'application est minimisée) ou au premier plan. Les deux premiers travaux terminent, mais le troisième ne fonctionne pas. Où je me trompe? Voici mon codeLe récepteur de radiodiffusion ne fonctionne pas?

public class MainActivity extends Activity{ 
      int choice; EditText et; 
      @override 
       onCreate(Bundle SavedInstanceState){ 
      setContentView(R.layout.main); 
      et= (EditText)findViewById(R.id.choice); 
     choice=Integer.parseInt(et.getText().toString()); 
       //some_stuff 
     if (choice==1) 
     registerReceiver(br, new IntentFilter("ACT_ONE"); 
     else if (choice==2){ 
     registerReceiver(br, new IntentFilter("ACT_TWO"); 
     registerReceiver(br, new IntentFilter("ACT_THREE"); 
     } 
     else if (choice==3) { 

      NotificationCompat.Builder nb=new NotificationCompat.Builder(this); 
        nb.setContentTitle("Do Job_Four"); 
        nb.setContentText("Click here to do job four"); 
        nb.setAutoCancel(true); 
        nb.setSmallIcon(R.drawable.icon); 
        nb.setDefaults(Notification.DEFAULT_ALL); 
        Intent in=new Intent(this,MainActivity.class); 
        IntentFilter lf=new IntentFilter("ACT_FOUR"); 
        PendingIntent pi=PendingIntent.getBroadcast(this,(int)System.currentTimeMillis(),in,0); 
        nb.setContentIntent(pi); 
        NotificationManager nm=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
        registerReceiver(br,lf); 
        nm.notify((int)System.currentTimeMillis(),nb.build()); 
      } 
     } 
      private void m_one(){ 
       //job_one_code 

      } 
      private void m_two(){ 
       //job_two_code 
      } 
      private void m_three(){ 
      //job_three_code 
     } 
      BroadcastReceiver br=new BroadcastReceiver(){ 
      @override 
      onReceive(Context c, Intent i){ 
      if(i.getAction().equals("ACT_ONE") 
       m_one(); 
      else if(i.getAction().equals("ACT_TWO") 
       m_two(); 
      else if(i.getAction().equals("ACT_THREE") 
       m_two(); 
      else if(i.getAction().equals("ACT_FOUR") 
       m_three(); 
      } 
      }; 
      @override 
      public void onDestroy(){ 
      unregisterReceiver(br); 
      super.onDestroy(); 
      } 
      } 

Voici manifeste

<receiver android:name=".MainActivity"> 
    <intent-filter android:priority="999"> 
     <action android:name="ACT_ONE"/> 
    </intent-filter> 
</receiver> 

Répondre

0
my pseudo code:-- Please register onPause() and unregister 
on onResume() method it will work. 


public class AndroidBroadcast extends Activity { 

         private BroadcastReceiver the_receiver = new BroadcastReceiver(){ 

           @Override 
           public void onReceive(Context c, Intent i) { 

           } 
         }; 
         // Set When broadcast event will fire. 
         private IntentFilter filter = new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED); 

         @Override 
         public void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          setContentView(R.layout.main); 
        Intent intent = new Intent(); 
        intent.setAction("ax.chayan.mybroadcast"); 
        sendBroadcast(intent); 
         } 

         @Override 
         protected void onResume() { 

          // Register reciever if activity is in front 
          this.registerReceiver(the_receiver, filter); 
          super.onResume(); 
         } 

         @Override 
         protected void onPause() { 

          // Unregister reciever if activity is not in front 
          this.unregisterReceiver(the_receiver); 
          super.onPause(); 
         } 

       }  
+0

Je viens d'ajouter "intent.setAction (" some_Action ")" Il me est hleped vous remercie, mais est-il une différence b/w intention = new Intent ("some_action") et les méthodes setAction? – Naveen