扩展NotificationListener的服务永远不会启动

弗里斯

我在实现通知侦听器时遇到问题。基本思想是要更改电话的静音模式,但是目前甚至没有调用相关功能(onStartCommand)。使电话静音的方法是调用enableSilentMode()方法,该方法在内部发送由getInterruptionFilterRequestIntent()方法构建的意图广播。

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class SilentModeService extends NotificationListenerService {
    public static int CURRENT_FILTER;

    public static final String ACTION_REQUEST_INTERRUPTION_FILTER =
            SilentModeService.class.getPackage().getName() + '.' + "ACTION_REQUEST_INTERRUPTION_FILTER";
    public static final String EXTRA_FILTER = "filter";

    public SilentModeService() { super();
        CURRENT_FILTER = getCurrentInterruptionFilter();
    }

    public static Intent getInterruptionFilterRequestIntent(Context context, final int filter) {
        Intent request = new Intent(ACTION_REQUEST_INTERRUPTION_FILTER);
        request.setComponent(new ComponentName(context, SilentModeService.class));
        request.setPackage(context.getPackageName());
        request.putExtra(EXTRA_FILTER, filter);
        return request;
    }

    /** Convenience method for sending an {@link android.content.Intent} with {@link #ACTION_REQUEST_INTERRUPTION_FILTER}. */
    private static void requestInterruptionFilter(Context context, final int filter) {
        Intent request = getInterruptionFilterRequestIntent(context, filter);
        context.sendBroadcast(request);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("SilentModeService", "Received start id " + startId + ": " + intent);
        Crashlytics.log(Log.INFO, "SilentModeService", "Requested new filter. StartId: " + startId + ": " + intent);

        return super.onStartCommand(intent, flags, startId);
    }

    public static void enableSilentMode(Context context)
    {
        requestInterruptionFilter(context, INTERRUPTION_FILTER_NONE);
    }

    public static void switchToFilter(Context context, int filter)
    {
        requestInterruptionFilter(context, filter);
    }

    @Override
    public void onCreate() {
        Log.i("SilentModeService", "onCreate");
        super.onCreate();
    }

在清单文件中,我添加了以下行

    <service android:name=".services.SilentModeService"       
         android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
            <action android:name="com.example.MyEvent.services.ACTION_REQUEST_INTERRUPTION_FILTER" />
        </intent-filter>
    </service>

我的OnCreate()方法没有被调用。但是我可以通过切换通知的安全选项来触发它和绑定。

我运行应用程序的方式是使用Genymotion模拟的API 21 android。

我尝试了很多摆弄,但是似乎从未调用过onStartCommand()方法。

该代码在很大程度上受Noyze github项目的启发:https : //github.com/Tombarr/Noyze/blob/master/src/main/AndroidManifest.xml

鲍勃·斯奈德

一个容易被忽视的错误...

requestInterruptionFilter()使用:

context.startService(request);

代替

context.sendBroadcast(request);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

QThread永远不会启动

来自分类Dev

Python似乎永远不会启动循环

来自分类Dev

启动 mongod 服务的 Ansible 任务永远挂起

来自分类Dev

服务器18.04在启动ip地址上请求一次,但如果断开连接则永远不会再请求

来自分类Dev

Chrome扩展程序内容脚本永远不会运行

来自分类Dev

自动伸缩组永远不会成功启动任何实例

来自分类Dev

观看服务中的模型永远不会发生任何变化

来自分类Dev

保证云服务永远不会丢失其VIP

来自分类Dev

Apache服务器不会自动启动

来自分类Dev

Apache服务器不会自动启动

来自分类Dev

systemd上的启动服务不会终止

来自分类Dev

重启后服务 uuidd 不会自动启动

来自分类Dev

Cron 服务不会在 16.04 启动

来自分类Dev

当服务执行 JAR 时,Jfilechooser 不会启动

来自分类Dev

将无形的可扩展记录传递给函数(永远不会结束故事?

来自分类Dev

Windows重新启动后,自动服务不会自动启动

来自分类Dev

启用的 systemd 服务不会在启动时启动

来自分类Dev

TransformBlock永远不会完成

来自分类Dev

永远不会执行getInitialProps

来自分类Dev

永远不会输入for循环

来自分类Dev

更新永远不会完成

来自分类Dev

TimerTick 永远不会触发

来自分类Dev

Wix Bootstrapper setup.exe永远不会启动并且日志读取无法加载主题控件

来自分类Dev

BrowserDriver 永远不会为每个 SERENITY CUCUMBER 场景重新启动

来自分类Dev

即使是使用多处理池的简单教程代码也永远不会启动

来自分类Dev

Ubuntu启动永远需要

来自分类Dev

Lightdm不会在启动时启动,它将在停止/启动服务后启动

来自分类Dev

Git推送到私有服务器永远不会完成

来自分类Dev

WCF服务会引发异常,但客户端永远不会收到它

Related 相关文章

热门标签

归档