Android 9.0 APP中显示导航栏的menu键

PS:以前  Android 4.0 时代,写了个APP,用屏幕底部菜单键提供两个刷新及退出按钮,但是现在 android 动不动就更新下,现在我手机已经到 9.0 版了,原来的导航栏三个小点点菜单键用原来的代码显示不出来了,因此只能找新的代码,找到了这个: https://blog.csdn.net/u014651216/article/details/53188698 ,的代码,贴到原工程里面一大溜报错,仔细检查了一番,修正了全部错误,测试了以下,菜单键终于出现了。证明代码可用,只是不晓得博主“七色音阶”是从哪里摘来的代码,都没测试一下就急匆匆的发出来,唉!还好最终可用。

代码摘自:https://blog.csdn.net/u014651216/article/details/53188698 ,经 “jessezappy” 修正:

注:以下代码已在我的APP中能正常工作于 android 9.0 中!!!

头部引用文件:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.os.Build;
import android.view.Window;

主函数:放置于 Activity 内,onCreate 后,同级

private void showNagivationMenuKey() {  
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.BASE_1_1) {  
        return;  
    }  
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.BASE_1_1) {  
        try {  
            int flags = WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null);  
            getWindow().addFlags(flags);  
        } catch (IllegalAccessException e) {  
            e.printStackTrace();  
        } catch (NoSuchFieldException e) {  
            e.printStackTrace();  
        }  
    } else {  
        try {  
            Method setNeedsMenuKey = Window.class.getDeclaredMethod("setNeedsMenuKey", int.class);  
            setNeedsMenuKey.setAccessible(true);  
            int value = WindowManager.LayoutParams.class.getField("NEEDS_MENU_SET_TRUE").getInt(null);  
            setNeedsMenuKey.invoke(getWindow(), value);  
        } catch (NoSuchMethodException e) {  
            e.printStackTrace();  
        } catch (NoSuchFieldException e) {  
            e.printStackTrace();  
        } catch (IllegalAccessException e) {  
            e.printStackTrace();  
        } catch (InvocationTargetException e) {  
            e.printStackTrace();  
        }  
    }
}

调用:可在setContentView 后调用

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);          
        setContentView(R.layout.youAPPname);
        //---在9.0以上系统加菜单键
        showNagivationMenuKey();
}

最终效果:三个点菜单键终于正常呼出,并且和我以前写好的弹出按钮菜单部分联动了。

注意,以上代码不包含下图中弹出的按钮菜单部分!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android 9.0引入了一种新的应用保活机制,即app进程保活白名单。这个白名单允许应用在后台保持运行状态,以便能够实时接收并处理重要的任务或事件。通过将应用添加到白名单,可以确保应用不会过早地被系统终止,从而提高了应用的用户体验和功能性。 要将应用添加到Android 9.0app进程保活白名单,需要进行以下步骤: 1. 获取系统唤醒锁:应用需要获取系统唤醒锁以防止系统在特定时间内休眠。可以使用PowerManager类的newWakeLock方法来获取唤醒锁,并在不需要时及时释放锁。 2. 启用前台服务:可以将应用设置为前台服务状态,以使其在后台运行时以高优先级运行,并在通知栏显示一个持续可见的通知。这样,即使应用在后台运行,用户仍然可以清楚地知道应用正在运行。 3. 注册广播接收器:可以注册一些系统广播的接收器,以确保应用在系统事件发生时得到通知并可以及时做出响应。比如注册ACTION_SCREEN_ON广播接收器,以在设备解锁时触发相应的操作。 4. 利用JobScheduler:JobScheduler是Android系统提供的一个调度框架,可以用于安排长期运行的任务,以便应用可以在后台执行这些任务。可以使用JobScheduler来进行任务的调度和管理,以减少应用在后台被系统终止的风险。 需要注意的是,虽然添加到app进程保活白名单可以保持应用在后台的运行状态,但为了避免对系统资源的滥用,应避免长时间运行或频繁使用这些保活方法。合理使用这些保活机制,可以提升应用的性能和用户体验,但也要确保不会对设备的电池寿命和性能造成过多的损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jessezappy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值