早上好,我试图拦截设置活动开放。 基本上当用户尝试访问全局设置活动时,我想触发一些事件。
我使用的是BroadcastReceiver,代码如下:
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");
}
}
}
但是没有意图被接收者拦截......
我错过了什么?
感谢您的时间
答案 0 :(得分:1)
我错过了什么?
您无法使用startActivity()
“拦截”BroadcastReceiver
来电。 BroadcastReceiver
收到广播,而不是startActivity()
来电。
答案 1 :(得分:0)
在反馈之后,我发现了另一种截取设置开放的方法:
@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
}
}
}