精华内容
下载资源
问答
  • 安卓通知栏

    2016-09-25 11:31:52
    安卓通知栏,自定义通知,不同api兼容等
  • 安卓通知栏例子

    2013-11-07 11:35:10
    安卓通知栏例子,一个简单的示例,运用了安卓通知栏的实例
  • 安卓通知栏实现

    2015-08-26 10:51:33
    安卓通知栏实现,通过 NotificationManager实现管理 notification ,包括 发送通知和 取消通知;
  • 安卓通知栏自定义布局提示(NotificationCompat.Builder)
  • 安卓通知栏图标

    2013-01-08 00:34:58
    安卓通知栏图标素材。 教程论坛上多的是。 还要凑足字。
  • Unity 获取安卓通知栏信息,在通知栏新增,删除时回调。Unity 和 Java 的调用和回调还是和之前一样:交互 首先定义一个java类继承自NotificationListenerService onNotificationPosted函数是在通知栏新增的时候回...

    Unity 获取安卓通知栏信息,在通知栏新增,删除时回调。Unity 和 Java 的调用和回调还是和之前一样:交互

    首先定义一个java类继承自NotificationListenerService

    onNotificationPosted函数是在通知栏新增的时候回调。
    onNotificationRemoved函数是在通知栏删除时回调。
    public class PhoneNotifyServer extends NotificationListenerService {
    
        private Handler mHandler;
    
        static final String ACTION_LOCAL_BINDING = "local_binding";
    
        public void setmHandler(Handler handler){
            mHandler = handler;
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return ACTION_LOCAL_BINDING.equals(intent.getAction())
                    ? new LocalBinder() : super.onBind(intent);
        }
    
        @Override
        public void onNotificationPosted(StatusBarNotification sbn) {
            // TODO Auto-generated method stub
            AndroidBaseMessage.instance._callBack.DebugCallBack("增加");
            Bundle extras = sbn.getNotification().extras;
    
            NotifyData data = new  NotifyData();
    
            data.id = sbn.getId();
            // 获取接收消息APP的包名
            data.packetName = sbn.getPackageName();
            // 获取接收消息的抬头
            data.title = extras.getString(Notification.EXTRA_TITLE);
            // 获取接收消息的内容
            data.data = extras.getString(Notification.EXTRA_TEXT);
    
            data.subText = extras.getString(Notification.EXTRA_SUB_TEXT);
    
            Bitmap icon = extras.getParcelable(Notification.EXTRA_SMALL_ICON);
    
            if(icon != null) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                icon.compress(Bitmap.CompressFormat.PNG, 100, baos);
                data.icon = baos.toByteArray();
            }
    
            data.type = 1;
    
            Message msg = Message.obtain(mHandler);
            msg.obj = data;
            mHandler.sendMessage(msg);
        }
    
    
    
        @Override
        public void onNotificationRemoved(StatusBarNotification sbn) {
            AndroidBaseMessage.instance._callBack.DebugCallBack("减少");
            // TODO Auto-generated method stub
            Bundle extras = sbn.getNotification().extras;
    
            NotifyData data = new  NotifyData();
            // 获取接收消息APP的包名
            data.packetName  = sbn.getPackageName();
    
            data.type = 2;
    
            Message msg = Message.obtain(mHandler);
            msg.obj = data;
            mHandler.sendMessage(msg);
        }
    
        public class NotifyData
        {
            public  int id;
            public int type ;
            public String packetName;
            public String title;
            public String data;
            public String subText;
            public byte[] icon;
        }
    
        public class LocalBinder extends Binder
        {
            public PhoneNotifyServer getService() {
                return PhoneNotifyServer.this;
            }
        }

    开启监听在Init函数中实现,定义另外一个类

      @Override
        public void Init(Context context, CallUnity callback) {
            super.Init(context, callback);
            this.context = context;
            _callBack = callback;
           
    
            String string = Settings.Secure.getString(context.getContentResolver(),
                    "enabled_notification_listeners");
            if (!string.contains(PhoneNotifyServer.class.getName())) {
                context.startActivity(new Intent(
                        "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
            }
    
            Intent intent = new Intent(PhoneNotifyServer.ACTION_LOCAL_BINDING);
            intent.setComponent(new ComponentName("com.lightin.unityARMainView", "com.lightin.phonemessage.PhoneNotifyServer"));
            context.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
    
    
    
        }
    
        private ServiceConnection mServiceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                mNotificationListener = ((PhoneNotifyServer.LocalBinder)service).getService();
                mNotificationListener.setmHandler(mHandler);
    
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                mNotificationListener = null;
            }
        };
    
      Handler mHandler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                PhoneNotifyServer.NotifyData data = (PhoneNotifyServer.NotifyData)msg.obj;
                _callBack.DebugCallBack("增加");
                _callBack.JavaObjectCallBack(data);
            }
        };

    首先会判断权限和申请,然后再绑定监听。

     

    Manifest要添加:

    <service
        android:name="com.lightin.phonemessage.PhoneNotifyServer"  //这是你的类名 ,下面都是固定的
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>

     

     

    展开全文
  • NotificationListenerService 安卓通知栏管理详解及分析一. 方法概述在api 18前可以通过辅助功能’AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED’或是反射活取通知栏相关信息。 现在我们可以根据...

    NotificationListenerService 安卓通知栏管理详解及分析

    一. 方法概述

    在api 18前可以通过辅助功能’AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED’或是反射活取通知栏相关信息。
    现在我们可以根据NotificationListenerService类非常容易的活取通知回调相关信息。

    二. NotificationListenerService详解

    通知的新增和删除,都会回调你注册的NLS里的方法,这些信息可以通过StatusBarNotification类对象来获取。
    另外比较主要的是,系统开启通知读取服务后,系统就会对APP有个保活功能,当被系统或是第三方软件kill后,系统会将你的应用重启。很多厂商会利用这点做一些坏坏的事情。并且国内各大杀毒,清理软件都有开启该功能。

    NotificationListenerService主要方法(成员变量):

    删除通知时会回调onNotificationRemoved, 新增通知或是更新时会回调onNotificationPosted

    • cancelAllNotifications() :删除系统中所有 可被清除 的通知;
    • cancelNotification(String pkg, String tag, int id) :删除具体某一个通知;
    • getActiveNotifications() :返回当前系统所有通知到StatusBarNotification[]的列表;
    • onNotificationPosted(StatusBarNotification sbn) :当系统收到新的通知后出发回调;
    • onNotificationRemoved(StatusBarNotification sbn) :当系统通知被删掉后出发回调;

    StatusBarNotification类详解

    StatusBarNotification,多进程传递对象,所有通知信息都会在这个类中通过Binder传递过来.
    内部几个重要的方法如下:

    • getId():返回通知对应的id;
    • getNotification():返回通知对象;
    • getPackageName():返回通知对应的包名;
    • getPostTime():返回通知发起的时间;
    • getTag():返回通知的Tag,如果没有设置返回null;
    • isClearable():返回该通知是否可被清楚,FLAG_ONGOING_EVENT、FLAG_NO_CLEAR;
    • isOngoing():检查该通知的flag是否为FLAG_ONGOING_EVENT;

    其中,我们通过getNotification()可以得到Notification对象,Notification是我们比较熟悉的类了,我们可以得到通知具体内容甚至可以还原RemoteViews到我们的本地view上。

    三. 使用方法

    正确使用NotificationListenerService需要进行三步骤:

    1. 新建一个类并继承自NotificationListenerService,override其中重要的两个方法;

    
        public class NLService extends NotificationListenerService {
            @Override
            public void onNotificationPosted(StatusBarNotification sbn) {
            }
    
            @Override
            public void onNotificationRemoved(StatusBarNotification sbn) {
            }
        }
    

    2. 在AndroidManifest.xml中注册Service并声明相关权限;

       <service android:name=".NLService"
              android:label="@string/service_name"
              android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
         <intent-filter>
             <action android:name="android.service.notification.NotificationListenerService" />
         </intent-filter>
       </service>
    

    3. 开启NotificationMonitor的监听功能;

    
                if (!isEnabled()) {
                    Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
                    startActivity(intent);
                } else {
                    Toast.makeText(this, "已开启服务权限", Toast.LENGTH_LONG).show();
                }
    
    
        private boolean isEnabled() {
            String pkgName = getPackageName();
            final String flat = Settings.Secure.getString(getContentResolver(),
                    ENABLED_NOTIFICATION_LISTENERS);
            if (!TextUtils.isEmpty(flat)) {
                final String[] names = flat.split(":");
                for (int i = 0; i < names.length; i++) {
                    final ComponentName cn = ComponentName.unflattenFromString(names[i]);
                    if (cn != null) {
                        if (TextUtils.equals(pkgName, cn.getPackageName())) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
    

    四. Demo讲解

    根据以上步骤,已经可以接收到通知栏变换时的回调,及获取当前所有通知列表,我们限制写个小例子,活取所有通知列表并且监听通知栏的变换,把收到的Notification及相关信息展示到我们的页面ListView中.

    1. 按照以上步骤建立基本例子框架

    写布局,要有开启服务的btn, 活取所有通知的btn和清除所有列表的btn, 界面比较简陋,如图:

    Demo截图

    2. 建立BroadcastReceiver和Service交互

    当然也可以用binder说是message通信,根据自己程序设计选择,这里为了简单的演示用了BroadcastReceiver机制

    
        class NotificationReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                String temp = mInfoList.size() + ":" + intent.getStringExtra(EVENT);
                NTBean bean = new NTBean();
                bean.info = temp;
    
                Bundle budle = intent.getExtras();
                bean.title = budle.getString(Notification.EXTRA_TITLE);
                bean.text = budle.getString(Notification.EXTRA_TEXT);
                bean.subText = budle.getString(Notification.EXTRA_SUB_TEXT);
                bean.largeIcon = budle.getParcelable(Notification.EXTRA_LARGE_ICON);
                Icon icon = budle.getParcelable(Notification.EXTRA_SMALL_ICON);
                bean.smallIcon = icon;
    
                bean.viewS = budle.getParcelable(VIEW_S);
                bean.viewL = budle.getParcelable(View_L);
    
                mInfoList.add(bean);
                Log.e("changxing", "receive:" + temp + "\n" + budle);
                mAdapter.notifyDataSetChanged();
            }
    
        }
    

    3. 活取相关回调展示页面

    将回调的相关参数传递到activity中, 展示到listview中,其中可以直接用RemoteViews#apply方法将Notification展示到我们本地ViewGroup中.

    程序运行如下:

    程序运行截图程序运行截图

    程序源码地址

    Github 源码地址

    有兴趣的同学可以下载源码继续学习,也可以对文章的DEMO源码优化提交Pull Requests!

    展开全文
  • 安卓通知栏示范代码

    2014-04-30 15:55:05
    简单的实现了通知栏消息的代码。是一个实例,阐述了在ANDROID下如何产生一个通知栏消息,和不同种类的通知栏
  • 安卓通知栏自定义布局提示(NotificationCompat.Builder)

    1.activity代码

    package com.example.lockscreen;
    
    import android.app.Activity;
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.support.v4.app.NotificationCompat;
    import android.view.View;
    import android.widget.RemoteViews;
    
    public class MainActivity extends Activity {
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
    	
    	public void clickNo(View v){
    	
    	       if(v.getId() == R.id.button1){
    	    	     //系统默认布局 
    	    	     Bitmap btm = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
    	   		     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this).setSmallIcon(R.drawable.ic_launcher)
    	   				.setContentTitle("5 new message")
    	   				.setContentText("twain@android.com");
    	   		     
    	   				mBuilder.setTicker("New message");//第一次提示消息的时候显示在通知栏上
    	   				mBuilder.setNumber(12);
    	   				mBuilder.setLargeIcon(btm);
    	   				mBuilder.setAutoCancel(true);//自己维护通知的消失
    	   			    //使用默认提示音
    	 			    mBuilder.setDefaults(Notification.DEFAULT_ALL);
    	   			   //点击通知栏跳转的activity
    	   				Intent resultIntent = new Intent(MainActivity.this,
    	   						MainActivity.class);
    	   				PendingIntent resultPendingIntent = PendingIntent.getActivity(
    	   						MainActivity.this, 0, resultIntent,
    	   						PendingIntent.FLAG_UPDATE_CURRENT);
    	   				
    	   				mBuilder.setContentIntent(resultPendingIntent);
    	   				
    	   				NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    	   				mNotificationManager.notify(0, mBuilder.build());
    	       }else if(v.getId() == R.id.button2){
    	    	   //自定义显示布局
    	           RemoteViews contentViews = new RemoteViews(getPackageName(),R.layout.custom_notification);
    			   //通过控件的Id设置属性
    			   contentViews.setImageViewResource(R.id.imageNo, R.drawable.ic_launcher);
    			   contentViews.setTextViewText(R.id.titleNo, "自定义通知标题");
    			   contentViews.setTextViewText(R.id.textNo, "自定义通知内容");
    			   //点击通知栏跳转的activity
    			   Intent intent = new Intent(MainActivity.this, MainActivity.class);
    			   PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent,
    			   PendingIntent.FLAG_CANCEL_CURRENT);
    			   
    			   NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
    			   MainActivity.this).setSmallIcon(R.drawable.ic_launcher)
    			   .setContentTitle("My notification")
    			   .setTicker("new message");
    			   //自动管理通知栏消息
    			   mBuilder.setAutoCancel(true);
    			   mBuilder.setContentIntent(pendingIntent);
    			   ///自定义布局
    			   mBuilder.setContent(contentViews);
    			   //使用默认提示音
    			   mBuilder.setDefaults(Notification.DEFAULT_ALL);
    			   NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    			   mNotificationManager.notify(1, mBuilder.build());
    	       }	
    	}
    }
    

    2.自定义布局文件(custom_notification.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent" 
         android:padding="10dp" 
         >
    	<ImageView 
    	       android:id="@+id/imageNo"
    	       android:layout_width="wrap_content" 
    	       android:layout_height="match_parent"
    	       android:layout_alignParentLeft="true"
    	       android:layout_marginRight="10dp"/>
    	
    		<TextView 
    		     android:id="@+id/titleNo" 
    		     android:layout_width="wrap_content" 
    		     android:layout_height="wrap_content"
    		     android:layout_toRightOf="@id/imageNo"/>
    		
    			  <TextView android:id="@+id/textNo" 
    			          android:layout_width="wrap_content" 
    			           android:layout_height="wrap_content" 
    			           android:layout_below="@id/titleNo" 
    			            android:layout_toRightOf="@id/imageNo">
    			    </TextView>
    		
    </RelativeLayout>
    


    3.源码下载:http://download.csdn.net/detail/wd4871/9440333


    展开全文
  • 自工信部2017年成立统一推送联盟 解决安卓因推送导致安卓手机卡顿的问题 推送部分因进程保活也是导致安卓卡顿的主要原因之一,相对应华为 vivo oppo 小米 等各大手机厂商都加入推送联盟 (极光推送也在其中)而后期...
    自工信部2017年成立统一推送联盟 解决安卓因推送导致安卓手机卡顿的问题 推送部分因进程保活也是导致安卓卡顿的主要原因之一,相对应华为 vivo oppo 小米 等各大手机厂商都加入推送联盟 (极光推送也在其中)而后期google也对推送做出改动 本篇是一个demo适合刚接触推送的小伙伴看:git地址给到
    

    https://github.com/Chrn0924/Natification.git

    欢迎大家start 不足请多多指教 评论即可

    下一篇将集成极光推送供参考

    展开全文
  • Notifaction安卓通知栏

    千次阅读 2015-05-08 19:08:42
    以上,就实现了一个简单的通知栏,可以通过nm.cancel(id-int)消除。 二。详细讲解 1.实例化一个通知,指定了图标、概要、时间 Notification notification = new Notification(android.R....
  • 安卓通知栏的用法

    2015-04-20 17:52:00
    通知栏简介: Notification can display some information for user.Some users use Android Wear platform, whichwork with notification better and use wear devices you can do...
  • 安卓通知栏颜色修改

    2014-11-21 14:06:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 实现的功能:使用下载框架下载文件,下载的进度通过eventbus发送,期间遇到了在安卓8.0系统上通知栏不显示的问题 一、创建通知的时候,要对安卓8.0系统特殊处理 1.先声明好需要用到的成员变量 private ...
  • 正确地设置安卓通知栏图标尺寸

    千次阅读 2016-11-08 09:56:58
    一个APP,需要用到通知的功能,但是通知栏上的icon在显示的时候会出现问题。具体的问题就是图标太大,只能显示其中的一部分: 这是程序的icon,ic_launcher.png: 我们想让他正确的显示为这样: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 623
精华内容 249
关键字:

安卓通知栏