我最近从 Fabric one 切换到新的 Firebase Crashlytics,但找不到在调试模式下禁用 Crashlytics 的替代方法。
织物:
val crashlytics = Crashlytics.Builder().core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build()
Fabric.with(this, crashlytics, Answers())
Run Code Online (Sandbox Code Playgroud)
有谁知道答案吗?我FirebaseCrashlytics已经看到该类现在在内部设置了其核心。我试过了FirebaseCrashlytics(CrashlyticsCore.??).getInstance(),但那种构造函数不起作用。
同时CrashlyticsCore该类已不再具有.Builder()可
我使用简单的HTTP Server BaseHTTPRequestHandler.问题是,当我想使用来自客户端的请求发布一些数据时,我得到了ConnectionError.我从requestslib文档做了简单的请求.同样有趣的是,HTTP Server将从客户端接收数据并将其打印到控制台.我不明白它是如何可能的.
客户:
def post_data():
"""Client method"""
json_data = {
'sender': 'User',
'receiver': 'MY_SERVER',
'message': 'Hello server! Sending some data.'}
data_headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
data_payload = json.dumps(json_data)
try:
post = requests.post('http://localhost:8080/post', data=data_payload,
headers=data_headers)
print(post.status_code)
except ConnectionError as e:
print("CONNECTION ERROR: ")
print(e)
Run Code Online (Sandbox Code Playgroud)
HTTP服务器:
def do_POST(self):
"""Server method"""
self.send_response(200)
print("Receiving new data ...")
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print(post_data)
Run Code Online (Sandbox Code Playgroud)
服务器结果:
C:\Users\mypc\Projects\PythonFiles\httpserver>python server.py
Fri Jan 5 01:09:12 2018: HTTP Server started on …Run Code Online (Sandbox Code Playgroud) 我有独立的 Android 应用程序。然后我开发了较小的网络应用程序Flutter并将其导出到网络服务器。它WebView作为 Android 版 Kotlin 中该独立应用程序的一部分加载到内部。
Android 支持 postmessaging,我可以WebView通过渠道直接发送数据。我的问题是如何在 Flutter Dart 代码中(在我的 Web 应用程序中)收听这些消息?
这是我在 Kotlin Android App 中使用的代码:
private var port: WebMessagePort? = null
@TargetApi(Build.VERSION_CODES.M)
private fun initPostMessagePort(){
val channelsAvailable = webView.createWebMessageChannel()
port = channelsAvailable.firstOrNull()
port?.apply {
setWebMessageCallback(object : WebMessageCallback() {
override fun onMessage(port: WebMessagePort, message: WebMessage) {
//TODO do something with message
}
})
}?:kotlin.run {
App.log("Port initialization failed - channels not available")
}
}
@TargetApi(Build.VERSION_CODES.M)
private fun sendMessageToPort(message: String){
port?.let …Run Code Online (Sandbox Code Playgroud) 我是 Bloc 架构的新手,最近看了一些教程。我有一个 StatelessWidget 页面,在里面我使用 BlocProvider 来初始化 UI 中的 Bloc。它将根据状态变化返回不同的小部件。
\n但即使在教程中,他们也仅从其他小部件调度事件(例如通过按按钮)。但在我的情况下,我需要在 Bloc Event 中的 Widget 之外调用 init API 调用。
\n如果我在其他 Widget 中,我可以调用它BlocProvider.of<FirstTabBloc>(context).dispatch(GetUserProfile());,但无法在 main() 中调用它,因为上下文不是来自 Widget。
代码:
\nclass FirstPage extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n body: SingleChildScrollView(\n child: firstTabElement(context),\n ),\n appBar: EmptyAppBar(mainAppColor),\n );\n }\n\n BlocProvider<FirstTabBloc> firstTabElement(BuildContext context) {\n return BlocProvider(\n builder: (_) => sl<FirstTabBloc>(),\n child: Expanded(\n child: Container(\n height: MediaQuery.of(context).size.height,\n width: MediaQuery.of(context).size.width,\n child: Column(\n children: <Widget>[\n Stack(\n children: [\n //Main Background\n …Run Code Online (Sandbox Code Playgroud) 我想使用新的 Android 12 API 作为启动画面,但如果我drawable在主题内使用我的图标作为参数windowSplashScreenAnimatedIcon,它就会被拉伸。如何调整该图标的大小?我的图标不是矢量。我必须使用 png 文件。
我想使用 FirebaseMessagingService 处理来自服务器的推送通知。onCreate但一开始并没有调用函数。我认为该服务是在应用程序启动时自动初始化的。另外,我开始从 firebase 云消息发送测试通知,但它不起作用。
class PushNotificationService: FirebaseMessagingService() {
private lateinit var app: App
override fun onCreate() {
super.onCreate()
App.log("FireBaseMsg: starting service")
app = application as App
}
override fun onMessageReceived(msg: RemoteMessage?) {
super.onMessageReceived(msg)
App.log("FireBaseMsg: onMessageReceived")
val pNotification = msg?.notification
if (pNotification != null){
val title = pNotification.title
val text = pNotification.body
if (!title.isNullOrEmpty() && !text.isNullOrEmpty()){
val p = PushNotification(app, NOTIFICATION_CHANNEL_ID_PUSH, title = title, text = text)
p.fireNotification(NOTIFICATION_ID_PUSH)
}
}
}
override fun onNewToken(token: String) {
App.log("FireBaseMsg: Received …Run Code Online (Sandbox Code Playgroud) 从 Android 10 开始,您可以在暗模式和默认亮模式之间切换。我还没有对此进行更深入的研究,因为这是一个新话题。暗模式颜色是由操作系统自动切换的,还是有什么方法可以告诉我的应用程序在暗模式打开时切换不同的应用程序主题?某些 Android 9 设备也可以使用暗模式。
因为我使用自定义参数制作了自定义深色主题,并且我为资源中的每种颜色设置了深色(使用自定义属性attrs.xml并将特定颜色资源应用于主题中的主题styles.xml)。同样它适用于我的应用程序的不同配色方案(例如蓝色、红色、绿色)。这样我就可以知道我的应用程序而不是系统中的不同视图将使用哪种颜色。
我唯一需要做的就是检测系统中是否开启/关闭暗模式。我可以强制用户在应用设置(自定义设置)中打开暗模式,但主题可能会受到系统暗模式(在手机设置中打开)的影响。
我想将 Google 地图功能迁移到 HMS。大部分零部件很容易迁移到华为,但我有集群的功能,我使用ClusterItem,并ClusterManager与DefaultClusterRenderer我的GoogleMap的显示标记簇作为一个标志,如果很多人有在地图上。
HMS 中缺少此功能。我找到了它Marker,HWMarkerCluster但它的系统完全不同,HWMarkerCluster甚至在 Android 的导入类选项中都没有找到。它仅适用于 Javascript API。
如果在 HMS 中有任何替代方案,有什么建议吗?因为我正在阅读 Map Kit 文档一个小时,但我找不到任何东西。
最近我的应用程序出现问题,Google Play因为他们发现我正在使用后台位置而突然被拒绝。但实际上我没有使用这个功能。我只有ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION权限,我正在使用FusedLocationProviderClient我的应用程序获取位置。此位置仅由应用程序内的用户操作请求,因此如果它在后台,则永远不会调用。我检查了合并清单功能,并尝试查找我导入的某些库是否使用了后台位置权限,但我什么也没找到。我还预防性地添加<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove"/>到我的清单中以阻止任何后台位置权限请求。我根本没有任何与位置有关的后台服务。唯一的后台服务FirebaseMessagingService用于推送通知。
最近有人有这个问题吗?
更新:
我在我的应用程序中检查了合并清单,但在那里找不到ACCESS_BACKGROUND_LOCATION权限。但是我发现了一些可以触发后台位置的服务,但我不确定。它们是 Firebase Crashlytics 的一部分,可能用于将数据发送到 Firebase,并且可以在后台工作。但我不认为他们正在发送任何位置。它们也是来自 Google 的 firebase 插件的一部分。
<service
android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.JobInfoSchedulerService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" >
</service>
<receiver
android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.AlarmManagerSchedulerBroadcastReceiver"
android:exported="false" />
Run Code Online (Sandbox Code Playgroud)
更新#2:
这是我用来获取位置的代码。
主要活动:
/**
* Updating location every second/1 meter
*/
var currLocation: GpsLocation? = null
private var locationManager : LocationManager? = null
private fun initLocationManager() {
if (app.hasLocationPermission){
locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
}
changeLocationUpdaters(true)
}
private fun …Run Code Online (Sandbox Code Playgroud) android android-manifest android-location android-permissions android-fusedlocation
我刚刚发现我的 Google Play 服务正在添加到合并的清单 AD 权限中,因此我无法将应用程序上传到我的 Play 商店,因为它需要推理为什么我想要在我的应用程序中添加广告(我不需要)。
这些是我的 gradle 库:
//Google SDK
implementation 'com.google.android.material:material:1.6.1'
implementation 'com.google.android.gms:play-services-auth:20.3.0'
implementation 'com.google.android.gms:play-services-location:20.0.0'
implementation 'com.google.android.gms:play-services-maps:18.1.0'
implementation 'com.google.maps.android:android-maps-utils:2.0.3'
//GCM for internet connection monitoring
implementation 'com.google.android.gms:play-services-gcm:17.0.0'
//GooglePay
implementation 'com.google.android.gms:play-services-wallet:19.1.0'
//Google Firebase SDK - Crashlytics, Firebase Messaging
implementation 'com.google.firebase:firebase-core:21.1.1'
implementation ('com.google.firebase:firebase-crashlytics:18.2.13') {
transitive = true
}
implementation 'com.google.firebase:firebase-messaging:23.0.8'
Run Code Online (Sandbox Code Playgroud)
看起来像它的谷歌分析(firebase)。但我不想也不在我的应用程序中使用任何广告内容,所以我不明白为什么 Google 在未经我批准的情况下将这些内容添加到我的应用程序中。
我只是尝试这样做:
implementation 'com.google.firebase:firebase-core:21.1.1' {
exclude module: "play-services-ads-identifier"
exclude module: "play-services-measurement"
exclude module: "play-services-measurement-sdk"
}
Run Code Online (Sandbox Code Playgroud)
正如我发现的,但它甚至没有编译(得到 GradleScriptException):
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method com.google.firebase:firebase-core:21.1.1() for …Run Code Online (Sandbox Code Playgroud) android ×7
firebase ×3
flutter ×2
crashlytics ×1
flutter-bloc ×1
flutter-web ×1
httpserver ×1
python ×1