小编Mea*_*cle的帖子

捕获 Android 媒体按钮事件

我有一个应用程序启动前台服务来播放一些媒体,我希望能够使用智能手表/耳机上的媒体按钮来控制它,并通过媒体样式通知等来控制它。

但我无法让媒体按钮始终如一地工作。在日志中,我可以看到它们经常被发送到其他应用程序,即使我最后启动了 MediaSession 和播放。

但尽管有一个媒体会话,我在其中 setActive(true) 并定义了媒体回调,但我无法让它工作?

显现:

<service
    android:name=".services.MediaControllerService"
    android:enabled="true"
    android:exported="true"
    android:permission="android.permission.FOREGROUND_SERVICE">
    <intent-filter android:priority="999">
        <action android:name="android.intent.action.MEDIA_BUTTON"/>
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

代码(注意这些包,在 android 10 中很难找到一起工作并给我 MediaStyle 的正确包组合)...

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioAttributes;
import android.media.AudioFocusRequest;
import android.media.AudioManager;
import android.media.MediaMetadata;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.view.KeyEvent;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.media.session.MediaButtonReceiver;

public class TextToSpeechMediaControllerService extends Service { 
    public static final String START_SERVICE_ACTION_INTENT = "serviceStart";
    private TextToSpeechPlayer player;
    private MediaMetadataCompat mediaMetaData; …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-mediasession androidx

8
推荐指数
1
解决办法
7261
查看次数

如何使用 Android 自动填充 API

我已经使用 android webview 组件构建了一个小浏览器,并希望使用 Android AutoFill API 集成密码/凭据管理器支持。

我已经阅读了文档,但完全迷失了方向,并且找不到任何与 webviews 等复杂事物集成的示例。

javascript 方面对我来说不是问题,当用户在登录表单上选择输入(并且应该显示自动填充对话框)以及完成输入用户名和密码时,我已经触发了事件并提交页面(并且凭据保存回密码管理器),但我正在努力理解这方面的 android 方面。

webview 似乎已经对此有了一些基本的支持,例如,如果我长按登录表单输入,并在上下文菜单中选择“自动填充”,我可以让它插入一些保存在凭证管理器中的值。问题是凭据已根据我的应用程序 ID 保存,而不是网站域,所以我的第一个问题是,当我请求自动填充菜单时,如何告诉 API 是针对特定字段类型的(例如用户名/密码)并属于特定网站,因此它知道要获取哪些凭据并可以稍后更新它们?这是我在选择登录表单中的字段时触发自动填充对话框的尝试。

更新: 当我在我的应用程序中创建一个静态 webview 时,自动填充会正确保存并提示表单上的凭据,并在每个站点正确保存它们但我需要它在 recyclerview 中的 webviews 中工作,并且由于某种原因,尽管共享,但它们没有相同的设置。我在 recyclerviews https://developer.android.com/guide/topics/text/autofill-optimize#recycle 中找到了有关自动填充的信息,但使用setAutofillId()似乎没有帮助,甚至这里的官方示例在我测试时似乎有点不可靠它在我的手机上https://github.com/android/input-samples/blob/master/AutofillFramework/Application/src/main/java/com/example/android/autofill/app/commoncases/RecyclerViewActivity.java

android autofill android-webview android-recyclerview android-autofill-manager

8
推荐指数
1
解决办法
1936
查看次数

Android 长按系统后退按钮监听

我想添加一个监听器,用于监听 android 系统后退按钮被长按的情况,即长按版本Activity.onBackPressed

这仅需要在我的应用程序可见时才起作用。

当长按返回时,Chrome 会显示历史菜单,所以它一定是可能的,但找不到它的钩子。谢谢

events android back long-click onlongclicklistener

0
推荐指数
1
解决办法
3427
查看次数