首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用<App> NearBy Messages API时,“谷歌在使用Google Play服务时遇到问题,请重试”

在使用<App> NearBy Messages API时,“谷歌在使用Google Play服务时遇到问题,请重试”
EN

Stack Overflow用户
提问于 2020-04-20 23:09:38
回答 1查看 334关注 0票数 1

在使用谷歌NearBy消息应用程序接口时,我遇到错误“在使用谷歌Play服务时遇到问题,请重试”

请给我这个问题的指导。

下面是Google消息传递API的导入

代码语言:javascript
运行
复制
    implementation 'com.google.android.gms:play-services-nearby:17.0.0'

下面是我如何使用代码订阅

代码语言:javascript
运行
复制
    val options = SubscribeOptions.Builder()
        .setStrategy(Strategy.BLE_ONLY)
        .build()
    Nearby.getMessagesClient(
        this, MessagesOptions.Builder()
            .setPermissions(NearbyPermissions.BLE)
            .build())
    Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options)
EN

回答 1

Stack Overflow用户

发布于 2020-08-14 11:36:53

我解决了这个问题。

附近的

  • 建议使用activity,在activty上,函数会工作得更好

除带有PendingIntent参数的

变体之外,所有的消息API都应该在前台活动中使用。您的活动应该在onStart()中发布(Message)或订阅(MessageListener),或者响应可见活动中的用户操作,并且应该始终在onStop()中对称地取消发布(Message)或取消订阅(MessageListener)。

  • 订阅时,如果使用activity,它会要求授予蓝牙、位置、麦克风权限,如果使用服务,它不会询问

因此,如果您使用该服务,则必须结合使用

  • 当您在mainActivity,中订阅时,如果顶部出现另一个活动(则MainActivty将为onStop),则会出现一个通知。因此,在订阅时,您必须单击OK以允许显示

中的另一个活动

示例如下:

MainActivity.tk

代码语言:javascript
运行
复制
private val mMessageListener: MessageListener = object : MessageListener() {
        override fun onFound(message: Message) {
            Log.d(TAG, "onFound message:"+ String(message.content))
        }

        override fun onLost(message: Message) {
            Log.d(TAG, "Lost sight of message: " + String(message.content))
        }
    }
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val sharedPref: SharedPreferences = getSharedPreferences("MyPref", Context.MODE_PRIVATE)
    val isFirstTime = sharedPref.getBoolean("FIRST_TIME", true)
    if(isFirstTime) {
            Nearby.getMessagesClient(this).subscribe(mMessageListener).addOnCompleteListener(this, OnCompleteListener {
                requestPermissionFirstTime()
            }).addOnCanceledListener(this, OnCanceledListener {
                requestPermissionFirstTime()
            })
        } else {
            requestPermissionCapture()
            checkPermissionAccessibility()
            startService(Intent(this, NearbyMessageService::class.java))
        }

}
private fun requestPermissionFirstTime() {
        val sharedPref: SharedPreferences = getSharedPreferences(Utils.IAMHERE_PREF, Context.MODE_PRIVATE)
        val editor = sharedPref.edit()
        editor.putBoolean("FIRST_TIME", false)
        editor.apply()
        Nearby.getMessagesClient(this).unsubscribe(mMessageListener)
        requestPermissionCapture()
        checkPermissionAccessibility()
    }

NearbyMessageService.tk

代码语言:javascript
运行
复制
class NearbyMessageService: IntentService("NearbyMessageService") {
private val mMessageListener: MessageListener = object : MessageListener() {
        override fun onFound(message: Message) {
            Log.d(TAG, "onFound message:"+ String(message.content))
        }

        override fun onLost(message: Message) {
            Log.d(TAG, "Lost sight of message: " + String(message.content))
        }
    }
    override fun onCreate() {
        super.onCreate()
        startForeground()
        Nearby.getMessagesClient(this).subscribe(mMessageListener)
    }

private fun startForeground() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channelId = "002"
            val channelName = "Nearby Service Channel"
            val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_NONE)
            channel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE
            val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            manager.createNotificationChannel(channel)
            val notification: Notification = Notification.Builder(applicationContext, channelId)
                .setOngoing(true)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setContentTitle(getString(R.string.app_name))
                .build()
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                startForeground(Utils.NOTICATION_ID_NEARBY, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION)
            } else {
                startForeground(Utils.NOTICATION_ID_NEARBY, notification)
            }
        } else {
            startForeground(Utils.NOTICATION_ID_NEARBY, Notification())
        }
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61325728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档