Android N 在下载管理器通知中有一个新的取消按钮。
我想在我的应用程序中执行一些代码,以在用户按下此按钮时停止进度条。如果有的话,调用哪个方法?
另请注意,意图过滤器操作 DownloadManager.ACTION_NOTIFICATION_CLICKED 仅在用户单击通知本身时触发,而不是在他/她单击“取消”按钮时触发。
if_downloadManager = new IntentFilter();
if_downloadManager.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
if_downloadManager.addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED);
br_downloadManager = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
....
}
if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
// This code is not executed when the user presses the Cancel Button in the Download Manager Notification
}
}
};
Run Code Online (Sandbox Code Playgroud)
提前致谢。
android cancel-button android-notifications android-download-manager
我使用 SimpleExoPlayer 实现了一个测试应用程序,效果很好。我现在想将音频焦点添加到我的应用程序中。
当用户启动应用程序时开始使用音频焦点播放很容易。在 onCreate() 末尾添加常用代码:
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager.requestAudioFocus(...
Run Code Online (Sandbox Code Playgroud)
工作正常。
但是当用户按下播放按钮时,我无法请求音频焦点,这是我记得的 PlaybackControlView 封装的。
换句话说,使用SimpleExoPlayer和SimpleExoPlayerView(PlaybackControlView)时如何捕获播放按钮单击事件?
重新定义 simpleExoPlayer.setPlayWhenReady() 似乎不可能,因为 SimpleExoPlayer 的实例是由 Factory 给出的,而不是使用 new 关键字实例化的。
simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)
Run Code Online (Sandbox Code Playgroud)
除了使用播放按钮解决这个问题之外,还有其他想法吗?提前致谢。
更新(17/02/17):
github.com/google/ExoPlayer 上的此问题被标记为“增强”。 这里
他们的第一个回答是:
您可以通过向 ExoPlayer 实例 (ExoPlayer.addListener) 添加侦听器并实现侦听器的 onPlayerStateChanged 以根据需要获取或释放音频焦点来实现此目的。请注意,每当 playWhenReady 发生更改时,都会调用 onPlayerStateChanged。
这个解决方案的小问题是 onPlayerStateChanged() 在音频/视频开始播放之后调用,而不是之前。我实现了它,当两个音频同时播放时,非常短的重叠从耳朵中当然是察觉不到的。因此,如果您需要的话,它可以被认为是一个很好的解决方案。当 ExoPlayer 团队提供更好的解决方案时,我会通知您。
在Android上中断两年后,我试图了解Android体系结构组件。在阅读官方文档和一些博客后,令我困惑的一件事是在哪里创建LiveData变量。
在下面的第一个变体中,我仅在存储库类中创建了一个livedata变量,而在存储库和View模型类的第二个变体中创建了一个livedata变量。两种变体均有效。
第一个变体:
public class ScoreViewModel extends AndroidViewModel {
private ScoreRepositorDB scoreRepo;
public ScoreViewModel(Application application) {
super(application);
scoreRepo = new ScoreRepositorDB(application);
}
public LiveData<Score> getScore(){
return scoreRepo.getScore();
}
...
}
Run Code Online (Sandbox Code Playgroud)
第二个变体:
public class ScoreViewModel extends AndroidViewModel {
private ScoreRepositorDB scoreRepo;
private LiveData<Score> score ;
public ScoreViewModel(Application application) {
super(application);
scoreRepo = new ScoreRepositorDB(application);
score = scoreRepo.getScore();
}
public LiveData<Score> getScore(){
// return scoreRepo.getScore();
return score;
}
...
}
Run Code Online (Sandbox Code Playgroud)
两种版本的存储库:
private LiveData<Score> score ;
ScoreRepositorDB(Application application) {
ScoreRoomDatabase db = ScoreRoomDatabase.getDatabase(application); …Run Code Online (Sandbox Code Playgroud) android mvvm android-room android-livedata android-viewmodel
我正在使用 google-colaboratory GPU 来训练神经网络模型。我的 python/pytorch 代码存储在 google-drive 中。我能够在协作和训练模型中安装我的驱动器。但是,即使重新启动我的电脑并重新启动后,“我的驱动器”中的任何 python 代码更改也不会更新到 google-colaboratory。
为了清除谷歌合作实验室缓存,我尝试过:
!google-drive-ocamlfuse -cc
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
/bin/bash: google-drive-ocamlfuse: command not found
Run Code Online (Sandbox Code Playgroud)
如何清理此缓存并避免在 google-colaboratory 考虑我的代码之前等待数小时?提前致谢
PS:我使用的挂载方法:
from google.colab import drive
drive.mount('/content/drive/')
Run Code Online (Sandbox Code Playgroud) 在 pycharm 中,我想禁用以下检查警告:“局部变量 'xxx' 可能在赋值之前被引用”,但我在设置/检查中找不到它。
PS:这不是重复的,因为我理解这个警告。我只是问如何在 pycharm 中禁用它。
更新:请在下面找到我的意思的例子
cond = True
def add1(x):
return x+1
if cond:
a = 1
if cond:
b = add1(a) # the warn is on the 'a'
Run Code Online (Sandbox Code Playgroud)
解决方案:
“未绑定局部变量”检查。(参见下面的 Lomtrur 回答)
我有一个回收器视图,其适配器使用 ListAdapter (版本 1.1.0):
class InnerEpisodeFragmentAdapter(
private val actCtx: Context,
) : ListAdapter<Episode, InnerEpisodeFragmentAdapter.MViewHolder>(COMPARATOR) {
...
Run Code Online (Sandbox Code Playgroud)
回收器视图由来自 Room 数据库 Episode 表的 kotlin 流提供:
vm.episodesFlow().asLiveData().observe(viewLifecycleOwner) { episodes ->
episodes.let { adapter.submitList(it) }
}
@Query("SELECT * FROM Episode ORDER BY pubDate DESC")
fun episodesFlow(): Flow<List<Episode>>
Run Code Online (Sandbox Code Playgroud)
例外的是,每次剧集表中的元组发生更改时,都会发出新的剧集列表并更新回收器视图。
它工作正常,但每次更新时都会出现可怕的闪烁。它给用户带来了糟糕的体验。
当流发出新值时如何避免这种闪烁?
在我的应用程序的先前版本中,我使用了像notifyDataSetChanged()或notifyItemChanged()这样从不闪烁的函数。我知道我仍然可以尝试使用这些函数,但如果我在使用kotlin时无法避免闪烁,我会非常失望流程如上图。谢谢。
android android-recyclerview android-listadapter kotlin-flow
Using the python inspect module, in a function, I would like to get the source code of the line that called that function.
So in the following situation:
def fct1():
# Retrieve the line that called me and extract 'a'
return an object containing name='a'
a = fct1()
Run Code Online (Sandbox Code Playgroud)
I would like to retrieve the string "a = fct1()" in fct1
All I can do so far is to retrieve the code of the whole module with :
code = inspect.getsource(sys._getframe().f_back) …Run Code Online (Sandbox Code Playgroud) 当我设置"22.2.0 Android设计库"TabLayout(android.support.design.widget.TabLayout)的tabBackground属性时,会出现两个问题:
这在Lollipop和Kitkat设备上都会发生.
如果没有tabBackground设置,涟漪效果和制表符指示都会起作用,但背景的默认颜色与工具栏不同,这与材料设计指南不完全一致.
请在下面找到XML:
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"
app:tabBackground = "?attr/colorPrimary" />
Run Code Online (Sandbox Code Playgroud) 我有一个房间数据库中的剧集流。我可以毫无问题地将这个流程作为实时数据进行观察。
但我也想在用户单击按钮时读取此流程中的最后一个值。我尝试使用 first() 终端流运算符,但它无法编译。你能帮忙或提出其他建议吗?
从流中读取的非编译尝试:
bd.buttonNext.setOnClickListener {
lifecycleScope.launch {
val episode: Episode? = viewModel.episodeFlow().first() <=== Compile ERROR
Snackbar.make(bd.root, "episode ${episode?.name}", Snackbar.LENGTH_SHORT).show()
}
}
Run Code Online (Sandbox Code Playgroud)
此流程来自 ROOM :
@Query("SELECT * FROM Episode WHERE id = :id")
fun getEpisode(id: Long): Flow<Episode?>
Run Code Online (Sandbox Code Playgroud)
存储库:
fun getEpisode(episodeId: Long): Flow<Episode?> = dao.getEpisode(episodeId)
Run Code Online (Sandbox Code Playgroud)
视图模型 - Id 来自 StateFlow :
fun episodeFlow(): Flow<Episode?>
= episodeIdStateFlow.flatMapLatest { episodeId ->
repository.getEpisode(episodeId)
}
Run Code Online (Sandbox Code Playgroud)
编译错误:
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public fun <T> Array<out …Run Code Online (Sandbox Code Playgroud) 我的应用程序需要在下载文件夹中的文本文件中保存一个字符串。目前(目标:API 29 (Q) 我正在使用 FILE API 和:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)
但是对于 API 30 (R),如果我理解得很好,我必须将其迁移到作用域存储 (MediaStore.Downloads)。
在这里,我有点失落。我在下载中找不到显示如何创建文本文件的好的文档或片段。如果有人可以解释或展示如何做到这一点,我会很高兴吗?
android ×7
kotlin-flow ×2
python ×2
android-room ×1
audio ×1
drive ×1
exoplayer ×1
inspect ×1
mediastore ×1
mount ×1
mvvm ×1
pycharm ×1
ripple ×1
warnings ×1