每当我的广播执行时,我想显示对前景活动的警报。
当前回答
如果您正在使用kotlin,那么它可以帮助您获得当前活动名称。 然而,getRecentTasks()方法在Java中已弃用。
val am: ActivityManager = applicationContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val activityName: String = am.getRecentTasks(1, 0).get(0).topActivity.toString()
其他回答
更新3:已经为此添加了官方api,请改用ActivityLifecycleCallbacks。
我在@gezdy的答案上方展开。
在每个活动中,我们可以使用下面的API,而不是通过手动编码将自己“注册”到应用程序中,这是第14级以来的API,可以帮助我们用更少的手动编码实现类似的目的。
public void registerActivityLifecycleCallbacks (Application.ActivityLifecycleCallbacks callback)
http://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks%28android.app.Application.ActivityLifecycleCallbacks%29
在应用程序中。ActivityLifecycleCallbacks,您可以得到哪个活动“附加”到或“分离”到这个应用程序。
但是,这种技术只在API级别14之后才可用。
如果您正在使用kotlin,那么它可以帮助您获得当前活动名称。 然而,getRecentTasks()方法在Java中已弃用。
val am: ActivityManager = applicationContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val activityName: String = am.getRecentTasks(1, 0).get(0).topActivity.toString()
一个相当简单的解决方案是创建一个单例管理器类,你可以在其中存储一个或多个活动的引用,或者你想在整个应用程序中访问的任何其他东西。
调用UberManager.getInstance()。setMainActivity(activity);在主活动的onCreate中。
.getMainActivity调用UberManager.getInstance () ();在应用程序的任何地方检索它。(我使用这个能够使用吐司从一个非UI线程。)
确保您添加了对UberManager.getInstance().cleanup()的调用;当你的应用程序被销毁时。
import android.app.Activity;
public class UberManager
{
private static UberManager instance = new UberManager();
private Activity mainActivity = null;
private UberManager()
{
}
public static UberManager getInstance()
{
return instance;
}
public void setMainActivity( Activity mainActivity )
{
this.mainActivity = mainActivity;
}
public Activity getMainActivity()
{
return mainActivity;
}
public void cleanup()
{
mainActivity = null;
}
}
在你的应用程序中创建一个类名ActivityManager (java)
public class ActivityManager implements Application.ActivityLifecycleCallbacks {
private Activity activity;
public ActivityManager(App myApplication) {
myApplication.registerActivityLifecycleCallbacks(this);
}
public Activity getActivity(){
return activity;
}
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
this. activity = activity;
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
this. activity = activity;
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
this. activity = activity;
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
}
然后在应用程序(kotlin)中初始化它
class App : Application() {
override fun onCreate() {
appOpenManager = AppOpenManager(this);
}
companion object {
lateinit var appOpenManager: AppOpenManager
}
}
然后用like
App.activityManager.getActivity ()
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件