【问题标题】:Q: Android Dev - Enable a Manifest-Disabled Broadcast-Receiver from Activity问:Android 开发 - 从 Activity 启用 Manifest-Disabled 广播接收器
【发布时间】:2016-08-27 06:03:30
【问题描述】:



我有一个广播接收器,它在我的清单文件中注册为“已禁用”..
它侦听基于系统的广播,然后触发.. 但我不希望我的 BroadcastReceiver 实际启用并侦听,直到我告诉它(例如,我的应用程序中的用户设置首选项使其启用) ..

从我通过搜索收集到的内容中,我发现了以下 2 个可能有效的方法:

Context.getApplicationContext().registerReceiver
        (LocationReceiver.class, 
            "android.intent.action.PROVIDER_CHANGED");


setComponentEnabledSetting
    (LocationReceiver.class, 
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
            0);


但他们都没有工作..
对于第一个,它说“不能从静态上下文引用非静态方法 getApplicationContext,而第二个我认为我可能没有正确引用第一个参数 (ComponentName)。

谁能给我一些见解?
谢谢!

【问题讨论】:

  • 对于第一个选项,删除类名(这将使其成为非静态的)。例如:getApplicationContext()... 而不是 Context.getApplicationContext() ...
  • 我试过你说的......getApplicationContext().registerReceiver(LocationReceiver.class, "android.intent.action.PROVIDER_CHANGED");但现在整个参数都用红色下划线..悬停它说这个...... registerReceiver(android.content.BroadcastReceiver, android .content.IntentFilter) 在 Context 中不能应用到 .... yada yada。

标签: java android android-activity broadcastreceiver android-manifest


【解决方案1】:

试试这个希望它会工作

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP)

【讨论】:

  • 我试过了,但还是不行。对于 Receiver 部分,它说它的参数错误,并且必须引用一个 ComponentName 或其他东西:PackageManager packageManager = getPackageManager();packageManager.setComponentEnabledSetting(LocationReceiver.class, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多