Какое разрешение требуется для получения ACTION_HEADSET_PLUG внутри широковещательного приемника - PullRequest
2 голосов
/ 17 ноября 2010

Я использую файл манифеста для создания широковещательного приемника, для ACTION_HEADSET_PLUG. Но я не могу получить трансляцию, когда гарнитура подключена / отключена, Какой permission я должен использовать внутри файла манифеста, чтобы иметь возможность получать ACTION_HEADSET_PLUG широковещательный умысел?

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

При использовании API 8 мой широковещательный приемник вызывается без создания службы или запроса дополнительных разрешений.

Вы можете определить внутренний класс в своей основной деятельности, подобный тому, который я определил ниже:

public class HeadSetBroadCastReceiver extends BroadcastReceiver
    {

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

            // TODO Auto-generated method stub
            String action = intent.getAction();
            Log.i("Broadcast Receiver", action);
            if( (action.compareTo(Intent.ACTION_HEADSET_PLUG))  == 0)   //if the action match a headset one
            {
                int headSetState = intent.getIntExtra("state", 0);      //get the headset state property
                int hasMicrophone = intent.getIntExtra("microphone", 0);//get the headset microphone property
                if( (headSetState == 0) && (hasMicrophone == 0))        //headset was unplugged & has no microphone
                {
                               //do whatever
                }
            }           

        }

    }

Затем зарегистрируйте приемник вещания динамически или статически. Я зарегистрировал мой динамически в методе onCreate () моей Activity:

this.registerReceiver(headsetReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));

Убедитесь, что вы отменили регистрацию вашего BroadcastReceiver с помощью контекста unregisterReceiver. В моем случае я сделал это в методе onDestroy (). Это должно сделать это.

3 голосов
/ 14 декабря 2010

Это не разрешение, а проблема с тем, как вы зарегистрировали получателя. Широковещательную рассылку с действиями для подключения гарнитуры могут принимать только зарегистрированные пользователи, например:

registerReceiver(receiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));

Это означает, что вам необходимо поддерживать работоспособную службу, которая содержит ссылку на получателя, а также отменяет ее регистрацию при прекращении работы службы. Наконец, служба, которая регистрирует получателя, также должна быть запущена при загрузке; что вы делаете с еще одним получателем, который перехватывает намерение android.intent.action.BOOT_COMPLETED. Для этой части вам понадобится разрешение android.permission.RECEIVE_BOOT_COMPLETED.

Для полного примера службы, которая делает это, вы можете проверить приложение , которое я написал, которое делает именно это .

...