精华内容
下载资源
问答
  • 怎么打开通知栏
    千次阅读
    2019-03-13 16:24:46
    /**
             * 通过手势操作打开通知栏
             * @throws UiObjectNotFoundException
             */
            public void testViewNotification() throws UiObjectNotFoundException{
                    
                    device.pressHome();
                    
                    device.swipe(300, 0, 300, 800, 50);
                    device.waitForIdle(2000);
                    device.pressBack();
                    
            }
    

    通过UiDevice中的swipe方法,模拟滑动操作,从状态栏上面下滑, 方法是UiDevice.swipe(startX,startY,endX,endY,steps)

    也可通过androidSDK,直接调用swipe方法

    更多相关内容
  • 打开通知栏

    2012-05-29 10:51:09
    本实例通过按钮单击来实现打开通知栏 在工作中使用的时候 移植一下就ok了 简单易用
  • 主要介绍了Android开发之禁止下拉通知栏的方法,实例分析了Android权限控制与Activity相应设置技巧,需要的朋友可以参考下
  • AccessibilityTest Android辅助功能测试,实现自动打开通知栏的特定联系人的QQ消息,并打开会话页面 可扩展的功能还是很多的,例如在没有root权限的情况下实现静默安装
  • 用PendingIntent.getActivity创建通知栏 在MainActivity中增加点击事件,用来启动NotifyService和延迟2秒销毁MainActivity,如下面代码所示 Intent intent = new Intent(MainActivity.this, NotifyService.class); ...

    个人博客

    用PendingIntent.getActivity创建通知栏

    MainActivity中增加点击事件,用来启动NotifyService和延迟2秒销毁MainActivity,如下面代码所示

    Intent intent = new Intent(MainActivity.this, NotifyService.class);
    startService(intent);
    
    tvTips.postDelayed(new Runnable() {
        @Override
        public void run() {
            finish();
        }
    }, 2000L);
    

    NotifyService类继承IntentService,并在onHandleIntent()方法类处理展示通知栏的逻辑,如下面代码所示

    private void showNotification() {
        Notification notification;
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        //pendingIntent生成规则
        Intent notifyIntent = new Intent();
        notifyIntent.setClass(this, NotifyActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
            notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("0", "notify",
                NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
            Notification.Builder builder = new Notification.Builder(this, "0")
                    .setAutoCancel(true)
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText("xxx")
                    .setOnlyAlertOnce(true)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentIntent(pendingIntent);
            notification = builder.build();
        } else {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setSmallIcon(R.mipmap.ic_launcher)
                    .setContentText("xxx")
                    .setAutoCancel(true)
                    .setWhen(System.currentTimeMillis())
                    .setOnlyAlertOnce(true)
                    .setContentTitle(getString(R.string.app_name))
                    .setContentIntent(pendingIntent);
            notification = builder.build();
        }
        manager.notify(0, notification);
    }
    

    运行代码,点击启动通知栏按钮,此时会创建一个通知栏,并且2秒后,主页自动关闭。然后在点击通知栏,进入到通知栏页面,点击返回按钮时,发下APP没有回到主页面,而是回到了Launcher主页面。如下面截图所示

    enter image description here

    所以用PendingIntent.getActivity方式打开通知栏,就会出现上面所描述的问题。为了解决这问题,提供了一下几种方式。

    用PendingIntent.getActivities创建通知栏

    处理逻辑基本上跟上面一致,只需替换pendingIntent生成规则那部分代码,需替换的代码如下面所示

    Intent notifyIntent = new Intent();
    Intent mainIntent = new Intent();
    notifyIntent.setClass(this, NotifyActivity.class);
    mainIntent.setClass(this, MainActivity.class);
    //需要注意这里的顺序
    Intent[] intents = new Intent[]{mainIntent, notifyIntent};
    PendingIntent pendingIntent = PendingIntent.
            getActivities(this, 0, intents, PendingIntent.FLAG_UPDATE_CURRENT);
    

    运行代码,如下面截图所示

    enter image description here

    此方法适用于MainActivityNotifyActivity在同一个moudle的情况。如果不在同一个moudle又该如何处理呢?接着往下看。

    用TaskStackBuilder创建通知栏

    替换pendingIntent生成规则那部分代码,需替换的代码如下面所示

    Intent notifyIntent = new Intent();
    notifyIntent.setClass(this, NotifyActivity.class);
    
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(NotifyActivity.class);
    stackBuilder.addNextIntent(notifyIntent);
    
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    

    除了替换pendingIntent生成规则之外,还需要修改AndroidManifest.xml内的代码,为NotifyActivity指定parentActivityName属性,如下面代码所示

    <activity android:name=".NotifyActivity"
        android:parentActivityName=".MainActivity"/>
    

    该属性是在Android 4.1(API level 16)引入的,此处的名称必须与为相应<activity>元素的android:name属性指定的类名称一致,以确定当用户按下返回按钮时应该启动哪一个Activity

    运行代码,效果如图2所示

    此方法可以适用于Activity在不同moudle的情况。

    但是,当主页MainActivity(这里用A代表,方便后面描述)的launchMode设置为singleTask时,当主页A存在时,并且还打开了其他页面’OtherActivity’(B),目前Activity的栈的顺序是A、B。当打开用PendingIntent.getActivitiesTaskStackBuilder两种方式创建的通知栏,页面跳转到NotifyActivity(C),并且一直按返回键,退栈的顺序是C、A、LauncherB却没在栈内了,见图3。具体原因是,当打开通知栏是,栈的顺序是A、B、A,由于AlaunchModesingleTask,此时会删除B,当整个通知栏操作全部完成时,Activity的栈的顺序是A、C,所以会出现上面描述的现象。如果要满足退栈顺序是C、B、A、Launcher该怎么实现?

    enter image description here

    用PendingIntent.getActivity创建通知栏,本地维护Activity栈

    1. 首先需要创建一个Activity管理类ActivityManager,来维护Activity栈,如下面代码所示
    public class ActivityManager {
        private static final byte[] sLock = new byte[0];
    
        private final Stack<Activity> mActivityStack = new Stack<>();
    
        private static ActivityManager sInstance;
    
        public static ActivityManager getInstance() {
            if (sInstance == null) {
                synchronized (sLock) {
                    if (sInstance == null) {
                        sInstance = new ActivityManager();
                    }
                }
            }
            return sInstance;
        }
    
        private ActivityManager() {
        }
    
        /**
         *  activity入栈
         */
        public void addActivity(Activity activity) {
            mActivityStack.add(activity);
        }
    
        /**
         *  activity出栈
         */
        public void removeActivity(Activity activity) {
            mActivityStack.remove(activity);
        }
    
        /**
         *  当栈的个数为1的时候,判断cls是否在栈内
         */
        public boolean currentActivity(Class<?> cls) {
            if (mActivityStack.size() != 1) {
                return true;
            }
            for (Activity activity : mActivityStack) {
                if (activity.getClass().equals(cls)) {
                    return true;
                }
            }
            return false;
        }
    }
    
    1. 其次创建一个Activity的基类BaseActivity,所有Activity页面需要继承这个基类,并且分别在onCreateonDestroy方法中分别实现Activity的入栈和出栈操作,并且重写返回事件,如下面代码所示
    public abstract class BaseActivity extends AppCompatActivity {
    
       @Override
       protected void onCreate(@Nullable Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           ActivityManager.getInstance().addActivity(this);
       }
    
       @Override
       public void onBackPressed() {
           super.onBackPressed();
           if (!ActivityManager.getInstance().currentActivity(MainActivity.class)) {
               Intent intent = new Intent(BaseActivity.this, MainActivity.class);
               startActivity(intent);
           }
       }
    
       @Override
       protected void onDestroy() {
           super.onDestroy();
           ActivityManager.getInstance().removeActivity(this);
       }
    }
    

    运行代码,如下面截图所示

    enter image description here

    展开全文
  • 主要介绍了Android开发实现判断通知栏是否打开及前往设置页面的方法,涉及Android通知栏打开、判断、设置等相关操作技巧,需要的朋友可以参考下
  • 而最新安卓4.4系统的通知栏沉浸模式就是在软件打开的时候通知栏和软件顶部颜色融为一体,这样不仅可以使软件和系统本身更加融为一体。 就是手机的通知栏的颜色不再是白色、黑色简单的两种了,本人用的小米4手机,米4...
  • 主要介绍了关于解决Android中点击通知栏的通知启动Activity问题的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
  • 10.0 在对SystemUI下拉通知栏做定制的时候,最后一条通知默认是收缩的 点击按钮 就会展开 原生系统如此,为了更美观 所以要求最后一条通知也默认展开 原来样式 修改后样式 先看下NotificationViewHierarchyManager...

    10.0 在对SystemUI下拉通知栏做定制的时候,最后一条通知默认是收缩的 点击按钮 就会展开 原生系统如此,为了更美观 所以要求最后一条通知也默认展开
    原来样式
    在这里插入图片描述

    修改后样式
    在这里插入图片描述

    先看下NotificationViewHierarchyManager 通知管理类

    @Inject
    public NotificationViewHierarchyManager(Context context,
    @Named(MAIN_HANDLER_NAME) Handler mainHandler,
    NotificationLockscreenUserManager notificationLockscreenUserManager,
    NotificationGroupManager groupManager,
    VisualStabilityManager visualStabilityManager,
    StatusBarStateController statusBarStateController,
    NotificationEntryManager notificationEntryManager,
    Lazy<ShadeController
    展开全文
  • Android通知栏权限是否开启

    千次阅读 2021-06-07 10:55:21
    通知栏权限是否开启需要分系统版本来操作4.4版本一下不处理,4.4到8.0,8.0以上@RequiresApi(api = Build.VERSION_CODES.KITKAT)public static boolean isNotificationEnabled(Context context) {if (Build.VERSION....

    通知栏权限是否开启

    需要分系统版本来操作

    4.4版本一下不处理,4.4到8.0,8.0以上

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)

    public static boolean isNotificationEnabled(Context context) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    //8.0手机以上

    if (((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).getImportance() == NotificationManager.IMPORTANCE_NONE) {

    return false;

    }

    }

    String CHECK_OP_NO_THROW = "checkOpNoThrow";

    String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";

    AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);

    ApplicationInfo appInfo = context.getApplicationInfo();

    String pkg = context.getApplicationContext().getPackageName();

    int uid = appInfo.uid;

    Class appOpsClass = null;

    try {

    appOpsClass = Class.forName(AppOpsManager.class.getName());

    Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE,

    String.class);

    Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);

    int value = (Integer) opPostNotificationValue.get(Integer.class);

    return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);

    } catch (Exception e) {

    e.printStackTrace();

    }

    return false;

    }

    跳转到手机设置界面:

    fun toSetting(activity: Activity, requestCode: Int) {

    val intent = Intent()

    intent.action = "android.settings.APPLICATION_DETAILS_SETTINGS"

    intent.data = Uri.fromParts("package", activity.packageName, null)

    activity.startActivityForResult(intent, requestCode)

    }

    设置界面返回处理:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == 101) {

    if (PermissionsUtil.isNotificationEnabled(mActivity!!) ) {

    ViewUtils.visibility(card_view_notification_status,false)

    }

    }

    }

    如果解决问题,是不是要打赏一波呢

    展开全文
  • Android通知栏监听

    千次阅读 2022-01-09 23:34:16
    通过继承 NotificationListenerService实现,它允许应用程序在创建或删除时接收有关通知的信息。 class MyNotificationListenerService : NotificationListenerService() { private val pkgName = this.javaClass...
  • HandleNotification 通过反射方法调用打开和关闭通知栏
  • android 通知栏跳转

    2016-09-03 23:53:19
    通知栏接受消息跳转到相应的界面的处理
  • Mac电脑通知栏快捷键

    千次阅读 2020-02-13 13:43:04
    双手从触摸板右上角滑过就可以展示通知栏
  • 项目中用到日程提醒功能,如果应用的通知栏没有打开,则需要提示用户前去打开通知栏,判断通知栏是否打开代码如下: private boolean isNotificationEnabled(Context context) { String CHECK_OP_NO_THROW = ...
  • 菜单通知栏

    2013-11-25 09:47:56
    分享一个菜单通知栏 在传统上的menu菜单上显示通知 可以用在待办的菜单栏上 个人觉得比较实用 分享给大家了&&
  • android 打开通知栏

    千次阅读 2012-03-17 12:00:56
    转载请声明:http://bbs.niuzhi.cc/thread-27-1-1.html try { Object service = getSystemService ("statusbar"); Class statusBarManager = Class.forName ("android.app.StatusBarManager");... Method
  • Service实现通知,判断通知栏是否已打开
  • 友盟推送通知栏问题

    2020-10-11 10:57:06
    在使用友盟推送的过程中,由于升级了推送sdk,推送的时候log能够打印出推送的消息,但是通知栏不会弹出,这个问题找了好久都没找到原因,代码又不能找到之前的版本。 这是我升级到的最新SDK //基础组件库依赖...
  • Mac显示通知栏的快捷键

    千次阅读 2020-07-07 10:44:26
    两指从右侧滑过触摸板就可以展示右侧的通知栏
  • 主要介绍了Android 8.0系统中通知栏的适配微技巧,Android 8.0系统最主要需要进行适配的地方有两处:应用图标和通知栏。具体配置方法技巧大家参考下本
  • 本篇文章主要介绍了android项目实现带进度条的系统通知栏消息,就是实现在通知栏看到下载进度。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • android 的消息通知还是很方便的,它会出现在窗体的顶部,并给出提示。常见的短信就是这样的通知方式。本文我们尝试实现一个这样的演示。演示截图: 实现步骤:1.获得NotificationManager对象,这是一个通知管理器。...
  • vue.js 消息通知插件 Vue Notibar(通知栏) (Vue Notibar (Notification bar)) Notification bar (Snackbar) plugin for Vue.js. Vue.js的通知栏(Snackbar)插件。 View Demo 查看演示 View Github 查看Github ...
  • 于是乎,打开Google,查看官方文档,学习最新的发送通知栏消息的方法。 本文中的代码均参照谷歌官方文档编写: http://developer.android.com/guide/topics/ui/notifiers/notifications.html 1.首先,获取系统的通知...
  • 下拉通知栏除了可以帮助Android用户来快速查看信息和进行各种的便捷开关操作外,通过一些第三方程序还可以让它拥有更多的实用功能,例如今天为大家推荐的这款《Bar Launcher》就可以为下拉通知栏加入快速启动APP的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,063
精华内容 31,225
关键字:

怎么打开通知栏