android - Comment faire pour obtenir l'événement de clic de caméra avec l'aide du récepteur de diffusion?



camera broadcastreceiver (1)

Je ne veux pas faire d'application. Je veux juste que lorsque je clique sur l'application de caméra par défaut (capture d'écran est jointe), alors il ouvre normalement l'appareil photo. Ensuite, comme je clique sur le bouton pour cliquer sur l'image, je veux juste montrer A Toast. Pour cela, j'ai essayé quelque chose. J'ai juste essayé de recevoir l'Intention de diffusion. Le code est le suivant. Mais je ne reçois pas le Toast. Aidez-moi, s'il vous plaît.

MainActivity.java

public class MainActivity extends Activity {

    CameraReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = new Intent("com.android.camera.NEW_PICTURE");
        CameraReceiver myReceiver = new CameraReceiver();
        sendBroadcast(intent);
    }

    private class CameraReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            abortBroadcast();
            Log.d("New Photo Clicked", ">");
            Cursor cursor = context.getContentResolver().query(
                    intent.getData(), null, null, null, null);
            cursor.moveToFirst();
            String image_path = cursor
                    .getString(cursor.getColumnIndex("_data"));
            Toast.makeText(getApplicationContext(), "New Photo is Saved as : " + image_path,
                    1000).show();
        }
    }

    @Override
    public void onStart() {
        super.onStart();
        myReceiver = new CameraReceiver();
        IntentFilter i = new IntentFilter("android.intent.action.CAMERA_BUTTON");
        registerReceiver(myReceiver, i);
    }

    @Override 
    public void onResume() {
        IntentFilter i = new IntentFilter("android.intent.action.CAMERA_BUTTON");
        registerReceiver(myReceiver, i);
        super.onResume();
    }

    @Override 
    public void onPause() {
        unregisterReceiver(myReceiver);
        super.onPause();
    }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.defaultcamers.MainActivity"
        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>
    </activity>
    <receiver
        android:name=".CameraReceiver"
        android:enabled="true" >
        <intent-filter android:priority="10000">
            <action android:name="android.intent.action.CAMERA_BUTTON" />
            <action android:name="com.android.camera.NEW_PICTURE" />
            <action android:name="android.hardware.action.NEW_PICTURE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    </receiver>
    <class android:name=".CameraReceiver" >
    </class>
</application>

Maintenant, quand j'ouvre la caméra et que j'essaie de cliquer sur la photo, je reçois "ClassNotFound Excaption" sur "CameraReceiver.java".


J'ai résolu le ClassNotFoundException en rendant la classe CameraReceiver publique. J'ai implémenté votre code sur mon projet android, et j'ai obtenu le ClassNotFoundException mais je l'ai résolu maintenant. Changez juste votre classe comme suit et changez aussi le premier paramètre de Toast comme je l'ai fait dans le code suivant.

public class CameraReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub 
        abortBroadcast();
        Log.d("New Photo Clicked", ">");
        Cursor cursor = context.getContentResolver().query(
            intent.getData(), null, null, null, null);
        cursor.moveToFirst();
        String image_path = cursor
            .getString(cursor.getColumnIndex("_data"));
        Toast.makeText(context, "New Photo is Saved as : " + image_path,
            1000).show();
    }

}

et ça devrait marcher, ça marche pour moi, quand je prends une photo de la caméra. Supprimez la classe de MainActivity et créez une classe CameraReceiver publique distincte pour le code ci-dessus.





android-camera