Android 为什么赢了';t CustomTabsClient.bindCustomTabsService工作?

Android 为什么赢了';t CustomTabsClient.bindCustomTabsService工作?,android,android-studio,kotlin,chrome-custom-tabs,Android,Android Studio,Kotlin,Chrome Custom Tabs,我最近一直在努力为我的Android应用程序添加一些内容,由于某种原因,我无法绑定到CustomTabsService 我有一个Chrome的更新版本 Android Gradle插件版本4.0.0 渐变版本6.1.1 我添加了日志调用,以查看连接是否成功,但从未成功。我正在尝试使用CustomTabscalBack根据用户在CustomTabs中的导航采取操作,但我需要先连接到服务。感谢您的帮助 依赖关系 // Custom Tabs implementation 'android

我最近一直在努力为我的Android应用程序添加一些内容,由于某种原因,我无法绑定到CustomTabsService

  • 我有一个Chrome的更新版本
  • Android Gradle插件版本4.0.0
  • 渐变版本6.1.1
我添加了日志调用,以查看连接是否成功,但从未成功。我正在尝试使用CustomTabscalBack根据用户在CustomTabs中的导航采取操作,但我需要先连接到服务。感谢您的帮助

依赖关系

// Custom Tabs
    implementation 'androidx.browser:browser:1.3.0-alpha01'
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
我也尝试过这个(当前版本为):

CustomTabsFragment

package com.mullr.rabbithole.ui.dig

import android.app.Service
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources
import androidx.browser.customtabs.*
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.graphics.drawable.toBitmap
import com.mullr.rabbithole.R
import com.mullr.rabbithole.main.MainActivity
import kotlinx.android.synthetic.main.dig_fragment.*

private lateinit var main: MainActivity

class DigTabs : Fragment() {

    // Custom Tabs
    lateinit var client: CustomTabsClient
    lateinit var session: CustomTabsSession
    lateinit var serviceConnection: CustomTabsServiceConnection
    var builder = CustomTabsIntent.Builder()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        main = requireActivity() as MainActivity

       serviceConnection = object : CustomTabsServiceConnection() {
            override fun onCustomTabsServiceConnected(name: ComponentName, mClient: CustomTabsClient) {
                Log.d("Service", "Connected")
                client = mClient
                client.warmup(0L)
                val callback = RabbitCallback()
                session = mClient.newSession(callback)!!
                builder = CustomTabsIntent.Builder(session);
            }

            override fun onServiceDisconnected(name: ComponentName?) {

            }
        }

        Log.d("start", "attempt")
        // Connect to service
        var ok =  CustomTabsClient.bindCustomTabsService(main, main.packageName, serviceConnection)
        if (ok) {
            Log.d("start", "connected")
        } else {
            Log.d("start", ok.toString())
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_dig_tabs, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        wiki_button.setOnClickListener {
            var url = "https://www.wikipedia.org/"
            loadCustomTab(url)
        }

        google_button.setOnClickListener {
            var url = "https://www.google.com"
            loadCustomTab(url)
        }
    }

    fun loadCustomTab(url: String) {
        builder.setSecondaryToolbarColor(ContextCompat.getColor(main, R.color.colorAccent))
        builder.setToolbarColor(
            ContextCompat.getColor(
                main,
                R.color.black
            )
        ) // Change tab toolbar color
        builder.setShowTitle(true)
        builder.addDefaultShareMenuItem()
        builder.enableUrlBarHiding()
        AppCompatResources.getDrawable(main, R.drawable.close_icon)?.let {
            DrawableCompat.setTint(it, Color.WHITE)
            builder.setCloseButtonIcon(it.toBitmap())
        }
        val customTabsIntent: CustomTabsIntent = builder.build()
        customTabsIntent.launchUrl(main, Uri.parse(url))
    }

    override fun onDestroy() {
        super.onDestroy()
        main.unbindService(serviceConnection)
    }

    class RabbitCallback : CustomTabsCallback() {
        override fun onNavigationEvent(navigationEvent: Int, extras: Bundle?) {
            super.onNavigationEvent(navigationEvent, extras)
            Log.d("Nav", "test")
            when (navigationEvent) {
                1 -> Log.d("Navigation", "Start")
                NAVIGATION_FINISHED -> Log.d("Navigation", "Finished")
                NAVIGATION_FAILED -> Log.d("Navigation", "Failed")
                NAVIGATION_ABORTED -> Log.d("Navigation", "Aborted")
                TAB_SHOWN -> Log.d("Navigation", "Tab Shown")
                TAB_HIDDEN -> Log.d("Navigation", "Tab Hidden")
                else -> Log.d("Navigation", "Else")
            }
        }
    }
}

这原来是一个愚蠢的错误。CustomTabsClient.bindCustomTabsService方法需要自定义选项卡服务的包名,而不是调用活动的包。 所以这个

var ok =  CustomTabsClient.bindCustomTabsService(main, main.packageName, serviceConnection)
应该是

var ok =  CustomTabsClient.bindCustomTabsService(main, "com.android.chrome", serviceConnection)
可以找到可能的包名称。这些措施包括:

  • com.android.chrome
  • com.chrome.beta
  • com.chrome.dev
var ok =  CustomTabsClient.bindCustomTabsService(main, "com.android.chrome", serviceConnection)