只要我的服务正常工作,我就会在状态栏中保留FLAG_ONGOING_EVENT通知,并且每秒更新一次.
在Android 8之后,我添加了Notification Channel,并且8和8+设备都运行良好,但是8个以上的设备每秒都在向我的logcat填充以下警告,这非常烦人:
04-10 20:36:34.040 13838-13838/xxx.xxxx.xxxx W/Notification: Use of stream types is deprecated for operations other than volume control
See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
Run Code Online (Sandbox Code Playgroud)
我很确定我没有声音通道或通知本身.
以下是我创建通知渠道的方法:
channel = new NotificationChannel(CHANNEL_ONGOING_ID,
getString(R.string.channel_ongoing_name),
NotificationManager.IMPORTANCE_LOW);
channel.setDescription(getString(R.string.channel_ongoing_desc));
mNotificationManager.createNotificationChannel(channel);
Run Code Online (Sandbox Code Playgroud)
我的通知:
RemoteViews view = new RemoteViews(getPackageName(),
R.layout.notification_ongoing);
view.setImageViewResource(R.id.notification_button,
mState == STATE_ONGOING ? R.drawable.ic_pause : R.drawable.ic_start);
view.setTextViewText(R.id.notification_text, Utils.getReadableTime(mMilliseconds));
view.setOnClickPendingIntent(R.id.notification_button,
PendingIntent.getBroadcast(mContext, 1, new Intent(INTENT_NOTIFICATION_TOGGLE),
PendingIntent.FLAG_UPDATE_CURRENT));
NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext,
CHANNEL_ONGOING_ID); …Run Code Online (Sandbox Code Playgroud) 我正在通过一个旨在检测手掌纹路的项目来使用 python 来学习 OpenCV。
我所做的基本上是使用Canny 边缘检测,然后在边缘上应用霍夫线检测,但结果不太好。
这是我正在使用的源代码:
original = cv2.imread(file)
img = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
save_image_file(img, "gray")
img = cv2.equalizeHist(img)
save_image_file(img, "equalize")
img = cv2.GaussianBlur(img, (9, 9), 0)
save_image_file(img, "blur")
img = cv2.Canny(img, 40, 80)
save_image_file(img, "canny")
lined = np.copy(original) * 0
lines = cv2.HoughLinesP(img, 1, np.pi / 180, 15, np.array([]), 50, 20)
for line in lines:
for x1, y1, x2, y2 in line:
cv2.line(lined, (x1, y1), (x2, y2), (0, 0, 255))
save_image_file(lined, "lined")
output = cv2.addWeighted(original, …Run Code Online (Sandbox Code Playgroud) 为什么我将 TabView 放入 NavigationView 是因为当用户进入具有自己底部操作栏的第二级“详细信息”视图时,我需要隐藏底部标签栏。
但是这样做会导致另一个问题:TabView 托管的所有第一级“列表”视图不再显示其标题。下面是一个示例代码:
import SwiftUI
enum Gender: String {
case female, male
}
let members: [Gender: [String]] = [
Gender.female: ["Emma", "Olivia", "Ava"], Gender.male: ["Liam", "Noah", "William"]
]
struct TabItem: View {
let image: String
let label: String
var body: some View {
VStack {
Image(systemName: image).imageScale(.large)
Text(label)
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
TabView {
ListView(gender: .female).tag(0).tabItem {
TabItem(image: "person.crop.circle", label: Gender.female.rawValue)
}
ListView(gender: .male).tag(1).tabItem {
TabItem(image: …Run Code Online (Sandbox Code Playgroud) 我有一个包含 2 组视图的活动,它们不能位于同一个 LAYOUT 组但属于同一个 LOGIC 组,这意味着它们应该同时显示或隐藏并绑定单击事件。问题是我觉得写这样的东西真的很糟糕:
fun hide() {
view1.visibility = View.GONE
view2.visibility = View.GONE
view3.visibility = View.GONE
// ...
view9.visibility = View.GONE
}
fun show() {
view1.visibility = View.VISIBLE
view2.visibility = View.VISIBLE
view3.visibility = View.VISIBLE
// ...
view9.visibility = View.VISIBLE
view1.setOnClickListener{ run() }
view2.setOnClickListener{ run() }
view3.setOnClickListener{ run() }
// ...
view9.setOnClickListener{ run() }
}
Run Code Online (Sandbox Code Playgroud)
我确实读过一篇文章,它描述了一种kotlin 技能,通过以某种方式对这些视图进行分组,然后处理这些组来简化这种混乱,但不幸的是,我再也找不到那篇文章了。
帮助将不胜感激!
======== 更新 2019-07-31 ==========
我找到了解决方案,但忘了更新这个问题,我正在寻找的“分组”实际上不是 Kotlin 特定的功能,而只是使用vararg,我们可以使用 Kotlin 扩展(非常棒)来简化更多:
// assume we …Run Code Online (Sandbox Code Playgroud) 我有几个 Android 项目,它们共享相同的辅助函数(在 Kotlin 中)和相同的资源,例如 button_save、toast_press_back_again_to_exit。将所有这些功能和资源提取到一个公共库中是很自然的,并且所有应用程序项目只需要包含这个库,而不是再次定义所有这些东西。
一切正常,直到昨天我开始了一个新项目,我仍然可以在布局 xml 中引用那些公共资源,例如 andoird:text="R.string.button_save",但我无法再在 Kotlin 中直接引用它们R.string.button_save,我必须使用“com.example.app.common.R.string.button_save”。
看起来 Android Studio 无法将库/模块资源合并到主应用程序的 R.java 中。我认为这可能是因为最新的 Gradle 版本(8.0.2 + com.android.tools.build:gradle:7.4.2),我尝试将 Gradle 降级到旧项目使用的相同版本(7.5.1 + com.android.tools.build:gradle:7.2.2),但它仍然不起作用。
我用谷歌搜索了几个小时,但大多数人都在讨论如何解决资源合并过程中的冲突,但我面临的问题是它们根本不合并。
我什至尝试从头开始创建一个应用程序项目,在其中定义任何内容以确保不发生冲突,然后创建一个新的模块库,只定义一个简单的字符串资源,并以 32 位随机字符串作为名称,也确保不发生冲突。但是,在应用程序方面,我无法通过 R.string.xxx 使用此字符串资源,但必须通过 com.example.myapplication.mylibrary.R.string.xxx 使用它。
为什么?任何线索将不胜感激!