2012-09-11 11 views
7

Desidero attivare il ricevitore Broadcast dalla notifica. Quando clicco su un pulsante che si trova sulla notifica mostra questo errore:come attivare Trigger ricevitore dalla notifica

"Unable to instantiate receiver com.example.testservice.myBroad: java.lang.ClassCastException: com.example.testservice.myBroad cannot be cast to android.content.BroadcastReceiver"

* aggiornati/modificati e la sua ora di lavoro * 1) Hey ragazzi possono aiutare per favore di gestire 2 pulsanti dalla notifica a trasmettere reciver Come posso passare un valore extra dal trigger di trasmissione di notifica al ricevitore che deve essere premuto o sospeso? 2) ora il mio pulsante funziona ma quando clicco sul testo di notifica non mi porta nella mia attività. qualsiasi aiuto

Scrivo questo codice per 2 pulsante con in più sul intento

RemoteViews layout = new RemoteViews(getPackageName(), R.layout.notification); 
      layout.setTextViewText(R.id.notification_title, getString(R.string.app_name)); 
      Intent clickIntent = new Intent(); 
      clickIntent.putExtra("button","pause"); 
      clickIntent.setAction(ACTION_DIALOG); 

      PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), pendingRequestCode, clickIntent, pendingFlag); 
      layout.setOnClickPendingIntent(R.id.notification_button,pendingIntent); 
      builder.setContent(layout); 


      layout = new RemoteViews(getPackageName(), R.layout.notification); 
      layout.setTextViewText(R.id.notification_title, getString(R.string.app_name)); 
      Intent click = new Intent(); 
      clickIntent.putExtra("Button","play"); 
      clickIntent.setAction(ACTION_DIALOG); 

      PendingIntent pi1 = PendingIntent.getBroadcast(getApplicationContext(), pendingRequestCode, click, pendingFlag); 
      layout.setOnClickPendingIntent(R.id.notification_button1,pi1); 
      builder.setContent(layout); 

file di ricevitore myBroad

Bundle extrasBundle = intent.getExtras(); 
    String str = (String) extrasBundle.get("button");  
    Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 

    context.stopService(new Intent(context, myPlayService.class)); 

Ecco il mio codice:

void showNotification() { 
    int pendingRequestCode = 0; 
     int pendingFlag = 0; 

     final Resources res = getResources(); 
     final NotificationManager notificationManager = (NotificationManager) getSystemService(
       NOTIFICATION_SERVICE); 
     Intent intent = new Intent(MainActivity.this,myBroad.class); 
     PendingIntent pi= PendingIntent.getActivity(this, 0, intent, 0); 
     Notification.Builder builder = new Notification.Builder(this) 
       .setSmallIcon(R.drawable.ic_action_search) 
       .setAutoCancel(true) 
       .setTicker("this is notification") 
       .setContentIntent(getDialogPendingIntent("Tapped the notification entry.")); 


      // Sets a custom content view for the notification, including an image button. 
      RemoteViews layout = new RemoteViews(getPackageName(), R.layout.notification); 
      layout.setTextViewText(R.id.notification_title, getString(R.string.app_name)); 
      Intent clickIntent = new Intent(); 
      clickIntent.setAction(ACTION_DIALOG); 

      PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), pendingRequestCode, clickIntent, pendingFlag); 
      layout.setOnClickPendingIntent(R.id.notification_button,pendingIntent); 
      builder.setContent(layout); 

      // Notifications in Android 3.0 now have a standard mechanism for displaying large 
      // bitmaps such as contact avatars. Here, we load an example image and resize it to the 
      // appropriate size for large bitmaps in notifications. 
      Bitmap largeIconTemp = BitmapFactory.decodeResource(res, 
        R.drawable.notification_default_largeicon); 
      Bitmap largeIcon = Bitmap.createScaledBitmap(
        largeIconTemp, 
        res.getDimensionPixelSize(android.R.dimen.notification_large_icon_width), 
        res.getDimensionPixelSize(android.R.dimen.notification_large_icon_height), 
        false); 
      largeIconTemp.recycle(); 

      builder.setLargeIcon(largeIcon); 

     notificationManager.notify(NOTIFICATION_DEFAULT, builder.getNotification()); 
} 


    PendingIntent getDialogPendingIntent(String dialogText) { 
     return PendingIntent.getActivity(
       this, 
       dialogText.hashCode(), // Otherwise previous PendingIntents with the same 
             // requestCode may be overwritten. 
       new Intent(ACTION_DIALOG) 
         .putExtra(Intent.EXTRA_TEXT, dialogText) 
         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 
       0); 
    } 

myBroad.class

public class myBroad extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(context, "received", Toast.LENGTH_SHORT).show(); 

    context.stopService(new Intent(context, myPlayService.class)); 

} 

}

file di manifesto è:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 


      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
      </activity> 

    <receiver android:name=".myBroad"> 
     <intent-filter > 
<action android:name="android.intent.action.MEDIA_BUTTON"/> 
    </intent-filter> 

     </receiver> 

    <service android:name="com.example.testservice.myPlayService" android:icon="@drawable/ic_action_search" android:label="@string/app_name" android:enabled="true"/> 


</application> 

risposta

3

Perché myBroad è un oggetto di attività, e non un oggetto di trasmissione ...

Invece di estendere (eredità) dall'attività, e poi fare una classe interna che estende broadcastreceiver, quindi ereditare direttamente da broadcastreceiver.

+0

sue opere Grazie tanto .. –

+0

si può aiutare .. voglio mettere in pausa la musica dal servizio quando si preme la notifica button..can mi guidi. come posso accedere al metodo di servizio quando ricevo il destinatario della trasmissione –

0

L'eccezione lo dice chiaramente: il tuo myBroad deve estendere BroadcastReceiver, non Activity come ora.

PS: è consigliabile passare a una convenzione di denominazione appropriata. Quindi dovrebbe essere MyBroad (classe) ma myBroad (oggetto di quella classe). cioè .:

MyBroad myBroad = new MyBroad(); 
+0

puoi aiutarmi .. voglio mettere in pausa la musica dal servizio quando preme questo pulsante di notifica..non puoi guidarmi. Come posso accedere al metodo di servizio quando ricevo il ricevitore di trasmissione –

+0

Come posso riconoscere nel ricevitore di trasmissione se è stato premuto il pulsante di pausa o il pulsante di riproduzione. anche quando ho premuto sul testo di notifica non mi ha portato in attività ..qualsiasi aiuto –

1

nel metodo getDialogPendingIntent si dovrebbe usare PendingIntent.getBroadcast invece di PendingIntent.getActivity. Ciò comporterà il tuo PendingIntent per trasmettere una trasmissione .

E risolvere questo problema:

public class myBroad extends BroadcastReceiver

+0

sì ho usato getbroadcast per il pulsante –

+0

non funziona dopo aver creato estensione da broadcastreciver puoi aiutare .. voglio mettere in pausa la musica dal servizio quando preme questo pulsante di notifica..can mi guida. Come posso accedere al metodo di servizio quando ricevo il destinatario della trasmissione –

+0

Come posso riconoscere nel ricevitore di trasmissione se è stato premuto il pulsante di pausa o il pulsante di riproduzione. anche quando ho premuto sul testo di notifica non mi ha messo in attività..un aiuto –

Problemi correlati