首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用android.settings.SETTINGS截取BroadcastReceiver

用android.settings.SETTINGS截取BroadcastReceiver
EN

Stack Overflow用户
提问于 2015-03-29 12:41:43
回答 2查看 1.4K关注 0票数 0

早上好,我正试着拦截设置活动的开始。基本上,当用户试图访问全局设置活动时,我希望触发一些事件。

我使用的是一个BroadcastReceiver,代码如下:

代码语言:javascript
复制
public class MainActivity extends Activity {

IntentFilter intentFilter;
BroadcastReceiver receiver;
Button settings;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    intentFilter = new IntentFilter(Settings.ACTION_SETTINGS);

    ((Button)findViewById(R.id.settings)).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Settings.ACTION_SETTINGS);
            startActivity(intent);
            Log.v("MYAPP", "starting intent");
        }
    });

}

@Override
protected void onPause() {
    super.onPause();

    unregisterReceiver(receiver);
    Log.v("MYAPP", "on pause, unregister receiver");
}

@Override
protected void onResume() {
    super.onResume();

    receiver = new MyBroadcastReceiver();
    registerReceiver(receiver, intentFilter);
    Log.v("MYAPP", "on resume, register receiver");
}

private class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("MYAPP", "received settings intent");
    }
}

}

但接收者没有截获意图..。

我遗漏了什么?

谢谢您抽时间见我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-29 12:43:32

我遗漏了什么?

您不能使用startActivity()“拦截”BroadcastReceiver调用。BroadcastReceiver接收广播,而不是startActivity()呼叫。

票数 1
EN

Stack Overflow用户

发布于 2015-03-29 13:33:11

在反馈之后,我找到了另一种拦截设置打开的方法:

代码语言:javascript
复制
 @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    Log.v(TAG, "Focus changed !");

    if (!hasFocus) {
        Log.v(TAG, "Lost focus !");
        ActivityManager am = (ActivityManager) getApplicationContext()
                .getSystemService(Context.ACTIVITY_SERVICE);
        ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
        if (cn != null
                && cn.getClassName().equals(
                        "com.android.settings.Settings")) {
            Log.v(TAG, "settings intercepted");

            // do your stuff

        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29329223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档