Kotlin внутренний приемник вещания в Манифесте. xml - PullRequest
0 голосов
/ 27 февраля 2020

У меня был отдельный класс extends BroadcastReceiver и я смог определить его в манифесте. Однако я хотел использовать некоторые функции в своем классе MPFragment, поэтому я поместил класс приемника вещания в класс Fragment как внутренний класс, чтобы я мог получить доступ к функциям внутри Fragment. Но теперь я не уверен, как определить это в манифесте. xml. Я попробовал несколько способов из Можно ли определить приемник вещания как внутренний класс в файле манифеста? , однако я получу сообщение от logcat: «Не удалось найти уникальный зарегистрированный приемник мультимедийной кнопки в данный контекст. Что я должен сделать, чтобы это исправить?

//manifest.xml
<receiver android:name=".MPFragment$MyReceiver"/>
class MPFragment : Fragment() {

//...other functions ...

    var broadcastReceiver = MyReceiver()
    class MyReceiver: BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            context?.sendBroadcast(Intent("TRACKS_TRACKS")
                .putExtra("actionName", intent?.getAction()))

            var action = intent?.getExtras()?.getString("actionName")
            Log.i(MYLOG, "actionstr " + action + ", " + intent?.action)

            when (action) {

                CreateNotification.ACTION_PREVIOUS -> {
                    Log.i(MYLOG, "action previous clicked")
                }

                CreateNotification.ACTION_NEXT -> {
                    Log.i(MYLOG, "action next clicked")
//                    nextSong()
                }

                CreateNotification.ACTION_PLAY -> {
                    Log.i(MYLOG, "action play clicked")
                }
            }
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Я забыл изменить аргумент Intent на 'MPFragment.MyReceiver :: class. java' после добавления внутреннего класса. Ниже код работает

манифест. xml

<receiver android:name=".MPFragment$MyReceiver"/>

CreateNotification Class

var pendingIntentPrevious: PendingIntent?
var intentPrevious = Intent(context, MPFragment.MyReceiver::class.java)
                    .setAction(ACTION_PREVIOUS)
                    .putExtra("actionName", ACTION_PREVIOUS)

...
   var notification = NotificationCompat.Builder(context, CHANNEL_ID)
                    .setSmallIcon(R.drawable.music)
                    .setContentTitle(title)    
                    .addAction(actionPrevious, "Previous", pendingIntentPrevious)
...


0 голосов
/ 27 февраля 2020

почему бы не определить класс как обычный класс, а не внутренний класс, отправить сообщение (например, действие) в действие (используйте rxbus, livebus, eventbus)? это мое решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...