2011-08-24 1 views
3

J'ai une application dans Android dans laquelle je veux prendre une photo lorsque le bouton physique du matériel pour la caméra est pressé.J'ai enregistré une intention pour ce type d'action mais mon récepteur de diffusion ne se fait jamais appeler.récepteur de diffusion pour ACTION_CAMERA_BUTTON ne se fait jamais appeler

Voici comment je l'ai fait:

classe

qui étend BroadcastReceiver

public class Adisor extends BroadcastReceiver { 

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

     if (intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) != null) { 
      // prevent the camera app from opening 
      abortBroadcast(); 
      System.out.println("HEY"); 
      mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
     } 
    } 

} 

est ici où j'enregistrer mon récepteur pour écouter les actions:

protected void onResume() { 
    Log.e(TAG, "onResume"); 
    super.onResume(); 
    drb = new Adisor(); 
    IntentFilter i = new IntentFilter(
     "android.intent.action.CAMERA_BUTTON" 
    ); 
    registerReceiver(drb, i); 
} 

Et dans mon dossier manifeste J'ai ceci:

<activity android:name=".TakePhoto" /> 
<receiver android:name=".Adisor" > 
    <intent-filter android:priority="10000">   
     <action android:name="android.intent.action.CAMERA_BUTTON" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter>    
</receiver> 

Le nom de l'activité dans laquelle je fais tout cela est: TakePhoto. Ma question est pourquoi ma méthode onReceive() ne se fait jamais appeler!

Ni ceci:

System.out.println("HEY"); 

apparaît dans mon logcat ou la méthode

System.out.println("HEY"); 
mCamera.takePicture(null, mPictureCallbacmPictureCallback); 

est appelé! Qu'est-ce que je fais mal?

+0

Avez-vous vu si elle va dans le récepteur en dehors de la diffusion si() – Blundell

+0

j'ai essayé avec un System.out. println() et il n'y a rien affiché ..... J'ai essayé à l'extérieur si() ... ce qui pourrait être faux? – Gabrielle

+0

s'il vous plaît aidez-moi aussi http://stackoverflow.com/questions/24989221/how-to-get-camera-click-event-with-the-help-of-broadcast-receiver –

Répondre

1

Vous devez avoir le récepteur enregistré dans le manifeste ou s'inscrire par programme. Supprimez l'appel registerReceiver() de la méthode onResume.

Editer:
Ajouter à votre manifeste.

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
+0

Et où devrait-il être enregistré.Peut-être fournir un morceau de code de travail, s'il vous plaît? – Gabrielle

+0

En mettant le récepteur dans votre manifeste, l'enregistre par défaut. Vous n'avez pas besoin d'enregistrer par programme. Retirez-le de onResume. – Ronnie

+1

Je l'ai fait mais avec le même résultat !!!! – Gabrielle

0

Votre filtre intention ne doit jamais avoir une priorité 10000. Le maximum autorisé pour les applications utilisateur est 999.

Voir setPriority(int) sur le site AndroidDev.

0

Pour ouvrir la seule la caméra de votre application, vous pouvez utiliser l'intention comme:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, ACTION_IMAGE_CAPTURE); 
Questions connexes