Reputation: 996
Good morning, I'm trying to intercept the Settings activity opening. Basically when a user try to access the global settings activity I want trigger some events.
I'm using a BroadcastReceiver and the code is the following:
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");
}
}
}
But no intent is intercepted by the Receiver...
What am I missing?
Thank you for your time
Upvotes: 0
Views: 1621
Reputation: 996
After the feedback I've found another way to intercept settings opening:
@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
}
}
}
Upvotes: 0
Reputation: 1006799
What am I missing?
You cannot "intercept" startActivity()
calls using a BroadcastReceiver
. A BroadcastReceiver
receives broadcasts, not startActivity()
calls.
Upvotes: 1