широковещательный приемник не получит событие камеры

Я пытаюсь сделать приложение, которое обнаруживает, когда пользователь делает фотографию. Я настроил class вещательного приемника и зарегистрировал его в файле манифеста:

      

Независимо от того, что я пытаюсь сделать, программа не получит трансляцию. Вот мой class приемника:

 public class photoReceiver extends BroadcastReceiver { private static final String TAG = "photoReceiver"; @Override public void onReceive(Context context, Intent intent) { CharSequence text = "caught it"; int duration = Toast.LENGTH_LONG; Log.d(TAG, "Received new photo"); Toast toast = Toast.makeText(context, text, duration); toast.show(); } } 

Если я удалю строку mimeType в манифесте и в своей деятельности отправлю свою собственную трансляцию, используя

 Intent intent = new Intent("com.android.camera.NEW_PICTURE"); sendBroadcast(intent); 

затем я успешно получаю трансляцию и вижу окно журнала и тостов. Правильно ли я подхожу к этому? Есть ли что-то, что мне нужно добавить?

Я решил это, но используя другой метод. Вместо использования широковещательного приемника я установил файловый сервер в отдельных папках, на которые была сохранена камера. Это не так практично, как по-другому, но он все еще отлично работает. Вот как я его настраивал:

 FileObserver observer = new FileObserver(android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/100MEDIA") { // set up a file observer to watch this directory on sd card @Override public void onEvent(int event, String file) { if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched Log.d(TAG, "File created [" + android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/100MEDIA/" + file + "]"); fileSaved = "New photo Saved: " + file; } } }; observer.startWatching(); // start the observer 

Я уверен, что этот способ работает на 100%. Я тщательно проверил.

Зарегистрируйте свой широковещательный приемник в AndroidManifest. Большинство ответов выше пропустите «категория android: name =” android.intent.category.DEFAULT “. BroadcastReceiver не может начинаться без этого

          

И, наконец, вы создаете class с именем «CameraReciver.java», простирающийся от BroadcastReceiver, и этот мой код:

 public class CameraReciver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i("INFO", "Enter BroadcastReceiver"); 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(); } 

После этого разверните свой проект в эмулятор (я использую genymotion), конечно ничего не произошло, потому что ваш BroadCastReceiver работает без GUI. Позвольте открыть приложение для камеры и нажать кнопку захвата. Если все в порядке, вы получите тост с контентом, например «Новое фото сохранено как: storage / emulated / 0 / DCIM / Camera / IMG_20140308.jpg». Позвольте наслаждаться ^ _ ^

Спасибо «tanay khandelwal» (см. Выше) о том, как получить путь к новой фотографии, снятой камерой ^ _ ^

Моя английская грамматика не очень хорошая, может быть, где-то не так, но я думаю, вы можете понять, что я имею в виду (^_^). Надеюсь помочь всем

вы должны проверить здесь: ImageTableObserver и здесь PicasaPhotoUploader, как они это делают.

По сути, у них есть наблюдатель для Media.EXTERNAL_CONTENT_URI который будет уведомлять о том, что происходит на SD-карте, а затем в Observer они проверяют, вернулись ли данные, фотография.

 camera = new ImageTableObserver(new Handler(), this, queue); getContentResolver().registerContentObserver(Media.EXTERNAL_CONTENT_URI, true, camera); 

По крайней мере, вам не нужно жестко указывать каталог.

Привет друзья. Я также пытался реализовать некоторую задачу по событию захвата, и после изучения и работы над этим я подготовил этот код, который работает нормально, чтобы он мог помочь вам

сначала создайте ресивер для своего события, скажем, CameraEventReciver, и тем, что вы можете реализовать свой код, я также даю вам путь к новому изображению, поэтому он будет более полезен для вашего кода

  public class CameraEventReciver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { 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(); } } 

И в Android Manifest вам просто нужно принять некоторые разрешения и зарегистрировать приемник с фильтром намерений, и соответствующие действия для захвата изображения также сделают ваш приемник андроидом включенным

          

Проблема в том, что вы поместили константное имя с пакетом в апострофы (как строку). Фактическая строковая константа имеет другое значение.

  • Значение тега ориентации EXIF ​​всегда 0 для изображения, сделанного с помощью приложения для портретов с вертикальной камерой
  • Android-камера: намерение данных возвращает null
  • Назначение камеры Android
  • Активность kill / onCreate вызвана после съемки с помощью намерения
  • Android: BroadcastReceiver намерен обнаружить фотокамеру камеры?
  • Interesting Posts

    Проверка подлинности зависимостей в автоматизированных системах сборки на основе Maven POM

    Oracle JDBC: неверное имя пользователя / пароль (ora-01017)

    Установка переменной окружения перед командой в bash не работает для второй команды в трубе

    Как установить регистр переменной для сохранения между играми в недоступном?

    Java-эквиваленты C # String.Format () и String.Join ()

    Как определить поддержку аудио MP3 в формате HTML5

    Фильтр ArrayList

    Как я могу настроить фокус (и отображать клавиатуру) на моем EditText программно

    Каков статус тега HTML 5 и интеграции веб-камеры?

    Entity Framework: уже существует открытый DataReader, связанный с этой командой

    Java-сокет / сериализация, объект не будет обновляться

    Именование интерфейса в Java

    Android Studio Gradle DSL метод не найден: ‘android ()’ – Ошибка (17,0)

    jqGrid: отключить поля формы при редактировании

    Как настроить `eth0` для повторного запуска` dhclient` при отключении и повторной загрузке?

    Давайте будем гением компьютера.