精华内容
下载资源
问答
  • 打开通知栏

    2012-05-29 10:51:09
    本实例通过按钮单击来实现打开通知栏 在工作中使用的时候 移植一下就ok了 简单易用
  • uiAutomator打开通知栏的方法

    千次阅读 2019-03-13 16:24:46
    /** * 通过手势操作打开通知栏 * @throws UiObjectNotFoundException */ public void testViewNotification() throws UiObjectNotFoundException{ device...
    /**
             * 通过手势操作打开通知栏
             * @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方法

    展开全文
  • AccessibilityTest Android辅助功能测试,实现自动打开通知栏的特定联系人的QQ消息,并打开会话页面 可扩展的功能还是很多的,例如在没有root权限的情况下实现静默安装
  • 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

    转载请声明:http://bbs.niuzhi.cc/thread-27-1-1.html


    try { 
       Object service = getSystemService ("statusbar"); 
       Class <?> statusBarManager = Class.forName 
    ("android.app.StatusBarManager"); 
       Method expand = statusBarManager.getMethod ("expand"); 
       expand.invoke (service); 
    } catch (Exception e) { 
    
       Toast.makeText(getApplicationContext(), e.getMessage(), 
    Toast.LENGTH_LONG).show(); 
    } 
    
    这里要加上权限: 
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" / >

    展开全文
  • 用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

    展开全文
  • 项目中用到日程提醒功能,如果应用的通知栏没有打开,则需要提示用户前去打开通知栏,判断通知栏是否打开代码如下: private boolean isNotificationEnabled(Context context) { String CHECK_OP_NO_THROW = ...

    项目中用到日程提醒功能,如果应用的通知栏没有打开,则需要提示用户前去打开通知栏,判断通知栏是否打开代码如下:

     private boolean isNotificationEnabled(Context context) {
    
             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;
          /* Context.APP_OPS_MANAGER */
            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 (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return false;
        }
    返回值为true时,通知栏打开,false未打开。

    以下代码为前往设置页面:

    private void goToSet(){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BASE) {
                // 进入设置系统应用权限界面
                Intent intent = new Intent(Settings.ACTION_SETTINGS);
                startActivity(intent);
                return;
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// 运行系统在5.x环境使用
                // 进入设置系统应用权限界面
                Intent intent = new Intent(Settings.ACTION_SETTINGS);
                startActivity(intent);
                return;
            }
        }
    注:测试功能时发现,若在应用设置中关闭app的通知栏/不勾选显示通知,则Toast无法显示

    展开全文
  • 项目中用到日程提醒功能,如果应用的通知栏没有打开,则需要提示用户前去打开通知栏,判断通知栏是否打开代码如下: private boolean isNotificationEnabled(Context context) { String CHECK_OP_NO_THROW = ...
  • Android通知栏微技巧,8.0系统中通知栏的适配

    万次阅读 多人点赞 2018-04-17 07:39:11
    大家好,今天我们继续来学习Android 8.0系统的适配。...在上一篇文章当中,我们学习了Android 8.0系统应用图标的适配,那么本篇文章,我们自然要将重点放在通知栏上面了,学习一下Android 8.0系统的通知栏适配
  • 1.点击通知栏通知,假如app正在运行,则直接跳转到DetailActivity显示具体内容,在DetailActivity中按Back键返回MainActivity 2.点击通知栏通知,假如app已经退出,先从SplashActivity进入,显示app启动界面,初始...
  • app常驻通知栏通知栏

    热门讨论 2013-03-16 11:29:10
    android环境下,进入APP,通知栏挂起一条通知,不可被自动清除,且在软件运行过程中,可以直接通过点击通知栏进入APP堆栈内最后一个activity。在软件退出时,通知栏自动关闭。
  • Service实现通知,判断通知栏是否已打开
  • 而最新安卓4.4系统的通知栏沉浸模式就是在软件打开的时候通知栏和软件顶部颜色融为一体,这样不仅可以使软件和系统本身更加融为一体。 就是手机的通知栏的颜色不再是白色、黑色简单的两种了,本人用的小米4手机,米4...
  • HandleNotification 通过反射方法调用打开和关闭通知栏
  • Flutter 通知栏通知

    千次阅读 2019-09-10 15:23:36
    本章节叙述Flutter 通知栏通知功能,主要是使用Flutter与原生交互功能调用Android发送通知。 效果图 所需知识 Flutter构建通道机制Channel Android创建通知渠道NotificationChannel发送通知 实现代码 Flutter...
  • 这就需要应用取得应用通知栏权限,但是目前国内大部分厂商默认都是不开启通知栏权限的,所以在需要的时候,就要先检测是否开启通知栏权限,如果未开启,则要引导用户去设置中打开通知栏权限。 获取是否开启通知栏...
  • 菜单通知栏

    2013-11-25 09:47:56
    分享一个菜单通知栏 在传统上的menu菜单上显示通知 可以用在待办的菜单栏上 个人觉得比较实用 分享给大家了&&
  • 而最新安卓4.4系统的通知栏沉浸模式就是在软件打开的时候通知栏和软件顶部颜色融为一体,这样不仅可以使软件和系统本身更加融为一体。就是手机的通知栏的颜色不再是白色、黑色简单的两种了,本人用的小米4手机,米4...
  •  现在也不做这些说明,只说明怎么样在收到通知后,点击通知栏打开相应的界面。当然也是通过查看一些大神书写的文章并实现功能。现在记录一下,方便以后查看。  说明:接入的是三方的极光推送 ,如果...
  • 本章节叙述Flutter 通知栏通知功能,主要是使用 Flutter与原生交互功能调用Android发送通知。
  • Android点击通知栏打开应用跳转到相应的Activity在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,...
  • 再接着,打开通知栏,用别的手机发消息给魅族,发现右上角有个小盒子加了个小点,打开盒子,发现消息就在里面 先说结果,再补过程。 魅族手机有个智能管理通知功能,一旦右滑取消通知栏消息5次以上,就会...
  • 利用反射打开系统的通知栏STATUS_BAR

    千次阅读 2016-03-15 17:43:19
    调用系统的通知栏(也就是手指下滑出现的通知栏)需要加入权限: public void openNotify() { // TODO Auto-generated method stub int currentApiVersion = android.os.Build.VERSION.SDK_INT; try { ...
  • 在收到推送通知后,点击通知栏打开APP的指定页面,是Andorid中的一个常见功能。 1、若APP存活,很简单,直接在通知栏的点击监听中启动对应Activity即可: @Override public void dealWithCustomAction(Context...
  • android的通知栏消息点击事件如果是打开一个activity时,我们要考虑两种情况: &amp;amp;amp;gt; 应用正在前台运行。&amp;amp;amp;gt; &amp;amp;amp;gt; 应用已退出。&amp;amp;amp;gt; 如果是...
  • 前言:在做推送的时候,App应用中的消息推送开关已经打开了可是还是收不到推送。以为是权限问题,于是乎查看了一下与Notification相关的权限。诶,诶,诶,没有。但是可以检测系统通知的开关。在这里记录一下 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,603
精华内容 27,841
关键字:

怎么打开通知栏