【问题标题】:how to check current running activity on screen如何在屏幕上检查当前正在运行的活动
【发布时间】:2014-04-24 12:28:37
【问题描述】:

当我按下“免提”按钮时,MediaButtonIntentReceiver 代码被调用,Main 活动在屏幕上打开,Toast 出现。

每次我按下按钮时,都会发生这种情况,但我希望它只在第一次发生。第二次按下按钮时,我只想显示 toast,因为活动已经打开。


Main.java

public class Main extends Activity
{
    private AudioManager mAudioManager;
    private ComponentName mAudioReceiver;

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

        mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        mAudioReceiver =
                new ComponentName(getPackageName(), MediaButtonIntentReceiver.class.getName());
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

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

        mAudioManager.registerMediaButtonEventReceiver(mAudioReceiver);
    }

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

        // mAudioManager.unregisterMediaButtonEventReceiver(mAudioReceiver);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

MediaButtonIntentReceiver.java

public class MediaButtonIntentReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "Handfree Button Pressed", Toast.LENGTH_SHORT).show();


        Intent i = new Intent(context, Main.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
        // abortBroadcast();
    }
}

【问题讨论】:

    标签: android android-activity broadcastreceiver


    【解决方案1】:

    Toast 移动到您的Main 活动中。

    仅在第一次显示活动时显示Toast


    重点是不要使用MediaButtonIntentReceiver来检查Main是否显示。只需使用接收器启动 Activity,并将您的逻辑放入 Activity 中。

    您可以使用boolean 值来检查它是否已显示,您可以在onPause() 方法中将其设置为false

    【讨论】:

    • 我明白了,但我需要在 MediabuttonIntentReceiver 中完成。
    • @user3286595 这违背了Android的设计,会非常困难,需要大量的hack。该方法遵循Android的设计,简单。我建议你再看看你的原因。祝你好运,无论你选择哪条路,ymmv
    • @user3286595 顺便说一句,您说“需要在 MediabuttonIntentReceiver 中执行此操作”的原因是什么——也许有误会?
    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多