2010-12-03 6 views
0

J'essaie de 'bloquer' l'action Camera lorsque mon application est active. La méthode onReceive est en cours d'exécution sur le BroadcastReceiver, mais par LogCat, il semble que cela soit fait après l'exécution de l'intention.Android BroadcastReceiver n'arrête pas l'action Camera Intent

manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com" android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:screenOrientation="landscape" android:debuggable="true" 
     android:clearTaskOnLaunch="true"> 
     <receiver android:name="com.receiver.CameraReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.CAMERA_BUTTON" /> 
      </intent-filter> 
     </receiver> 

     <activity android:name=".Main" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.media.action.IMAGE_CAPTURE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

    </application> 


</manifest> 

com.receiver.CameraReceiver

package com.receiver; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class CameraReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(this.toString(), "Suck It Android!"); 
     abortBroadcast(); 
    } 

    @Override 
    public String toString() { 
     return "com.receiver.CameraReceiver"; 
    } 
} 

LogCat

12-03 14:47:41.171: INFO/ActivityManager(981): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x14000000 cmp=com.google.android.camera/com.android.camera.Camera } 
12-03 14:47:41.288: INFO/WindowManager(981): Setting rotation to 1, animFlags=1 
12-03 14:47:41.304: INFO/ActivityManager(981): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34 uiMode=17 seq=30} 
12-03 14:47:41.811: DEBUG/dalvikvm(981): GC_EXTERNAL_ALLOC freed 8025 objects/388808 bytes in 208ms 
12-03 14:47:41.999: DEBUG/AlarmManagerService(981): Kernel timezone updated to 300 minutes west of GMT 
12-03 14:47:42.288: INFO/[com.specialed.receiver.CameraReceiver](13152): Suck It Android! 

Répondre

2

En fait, je ne pouvais faire en ajoutant

<category android:name="android.intent.category.DEFAULT" /> 

à mon fiter intention, il ressemble à:

<receiver android:name="com.receiver.CameraReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.CAMERA_BUTTON" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</receiver> 

et cela semble fonctionner, c un commentaire de quelqu'un à si ceci ou le android:priority est la bonne façon. En outre, si je peux arrêter le 'Vibreur' qui se produit sur le bouton, appuyer sur ce qui serait utile.

Merci!

0

Je don Je ne sais pas exactement si je me trompe complètement à ce sujet, mais je crois comprendre qu'un BroadcastReceiver n'arrêtera pas une autre activité mais sera exécuté parallèlement.

Edit: je l'ai trouvé un fil dans le groupe android dev google qui pourraient vous aider: click

L'essence: Définir la priorité élevée de votre récepteur à une valeur élevée, si Android choisit votre application pour commencer d'abord lorsque le bouton de la caméra est enfoncé.

<intent-filter android:priority=*"10000"*>

et la première ligne de votre onReceive(): abortBroadcast();

Questions connexes