0

Ich habe eine Service, die nach Änderungen in der Datenbank sucht und dann Benutzer basierend auf bestimmten Faktoren benachrichtigen. Eine solche notification hat eine Aktionstaste durch Anklicken, auf der eine BroadcastReceiver ausgelöst wird und Activity.class geöffnet wird.Ich kann keine Absichten von einem BroadcastReceiver erhalten

Hier ist, wie:

public class MyBroadcastReceiver extends BroadcastReceiver { 

     public MyBroadcastReceiver(){ 
      super(); 
     } 

     @Override 
     public void onReceive(final Context context, Intent intent) { 

      if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id_for_rating))) { 
       Intent resultIntent = new Intent(getBaseContext(), Activity.class); 
       resultIntent.putExtra("abc", "abc"); 
       resultIntent.setType("text/plain"); 
       resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(resultIntent); 
      } else { 
       Toast.makeText(context, "Intent is null.", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

Hier ist, wie ich versuche Absicht in einer ViewHolder Klasse von dieser Activity.class genannt zu erhalten:

public class RModelClass extends AbstractItem<RModelClass, RModelClass.ViewHolder> { 

    public RModelClass() {} 

    @Override 
    public int getType() { 
     return R.id.recycler_view_r; 
    } 

    @Override 
    public int getLayoutRes() { 
     return R.layout.r_played; 
    } 

    @Override 
    public void bindView(final RModelClass.ViewHolder holder, List payloads) { 
     super.bindView(holder, payloads); 

     String abc; 
     Intent intent = new Intent(); 
     if (intent.getExtras() != null) { 
      openForRating = intent.getExtras().getString("abc"); 

      if (abc != null) { 
       Log.d("abc", "YO!!"); 

      } else { 
       Log.d("abc", "NO!!"); 
      } 

     } else { 
      Log.d("null", "INTENT!!"); 
     } 
    } 

    protected static class ViewHolder extends RecyclerView.ViewHolder { 

     public ViewHolder(View itemView) { 
      super(itemView); 

     } 

    } 

} 

Das Problem ist, dass ich bin immer D/null: INTENT!! Abgemeldet und nicht in der Lage, die Absicht zu erhalten.

Bitte helfen Sie mir warum ist das passiert und wie bekomme ich die Absicht?

Antwort

1

sollten Sie getApplicationContext() in BroadcastReceiver verwenden, um Intent zu erstellen.

Intent resultIntent = new Intent(getApplicationContext(), Activity.class); 
resultIntent.putExtra("abc", "abc"); 
resultIntent.setType("text/plain"); 
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(resultIntent); 

auch tun Sie Fehler in dieser Zeile

Intent intent = new Intent(); 

das ist neu Absicht Objekt und Sie versuchen, Werte aus diesem Intent Objekt zu erhalten.

Sie müssen Intent von Ihrem Android-Komponente wie getIntent()

, wenn man in Fragment Klasse oder in Adapter sind dann getActvity().getIntent() und ((Activity)context).getIntent() verwenden jeweils für fragment und Adapter.

+0

Ich habe 'getIntent()' versucht, aber ich bekomme 'Kann Methode 'getIntent()' 'Warnung nicht auflösen. Ich habe es auch so versucht: 'holder.itemView.getContext(). GetIntent()' hat aber die gleiche Warnung bekommen. –

+1

Wenn Sie sich in der Fragment-Klasse oder in Adapter befinden, verwenden Sie getActvity(). GetIntent() und ((Activity) -Kontext) .getIntent() für Fragment und Adapter. –

+0

aktualisieren Sie die Antwort, so dass ich als akzeptiert markieren kann. –

0

warum ist das passiert

Sie ein brandneues Intent-Objekt erstellen:

Intent intent = new Intent(); 

Dann versuchen Sie für Extras auf diesem brandneuen Intent Objekt suchen:

if (intent.getExtras() != null) { 

Das Intent Objekt ist brandneu. Es wird keine Extras haben.

Wie bekomme ich die Absicht?

Um die Intent die verwendet wurde, um die Aktivität zu erstellen, getIntent() nennen.

+0

Ich habe 'getIntent()' versucht, aber ich bekomme 'Kann Methode 'getIntent()' 'Warnung nicht auflösen. Ich habe es auch so versucht: 'holder.itemView.getContext(). GetIntent()' hat aber die gleiche Warnung bekommen. –

+0

@HammadNasir: 'getIntent()' ist eine Methode für 'Aktivität'. Die Aktivität, die diese UI erstellt, muss diese 'Absicht' in Ihre' RModelClass' oder zumindest in ihre 'bindView() 'Methode übergeben. – CommonsWare

Verwandte Themen