位置:首页 » 技术 » Android系统 应用图标展示未读消息数(BadgeNumber) 桌面app图标的角标显示

Android系统 应用图标展示未读消息数(BadgeNumber) 桌面app图标的角标显示

日期:2013-04-30 阅读:4num
Advertisement

Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

参考:
http://dev.xiaomi.com/doc/p=3904/index.html
http://my.oschina.net/ososchina/blog/352286?p=1#comments
https://github.com/leolin310148/ShortcutBadger
http://www.voidcn.com/blog/kongbaidepao/article/p-62251.html
http://www.eoeandroid.com/thread-557210-1-1.html

下面这篇博客,测试无效
http://blog.csdn.net/janice0529/article/details/44344169

Android系统 小米,三星,索尼手机发送桌面快键提醒数字图标,在Android系统中,众所周知不支持BadgeNumber,虽然第三方控件BadgeView可以实现应用内的数字提醒。

但对于系统的图标,特别是app的logo图标很难实现数字标志,即使是绘图的方式不断修改,但这种方式天生弊端,实用性很差。但幸运的是,某些ROM厂商提供了私有的API,但也带来了难度,API的不同意意味着代码量的增加和兼容性问题更加突出。

我们现在来实现桌面logo或者说icon右上角的图标,先来看2张图,第一张来自互联网,第二张来自个人实践!(由于实验条件有限,只能测试小米的(⊙o⊙)…,有兴趣的同学测试一下其他的吧)

Android系统  应用图标展示未读消息数(BadgeNumber) 桌面app图标的角标显示
Android系统  应用图标展示未读消息数(BadgeNumber) 桌面app图标的角标显示

实现原理:

首先我们要明白 并不是应用本身处理对启动图标进行修改、图标的动态修改的过程主要是在Launcher里面完成的.在应用安装,更新,卸载的时候,都会有广播发出,Launcher在LauncherApplication 中注册广播,在LauncherModel中处理接收到广播的消息,重新加载更新应用信息(如:应用图标、文字等)。但是原生的android系统是并不支持该特性的(及不能通过发送特定的系统广播 达到动态修改启动图标的效果),但是在强大的第三方Android手机厂商(如:三星、小米)的系统源码深度定制下、通过修改了Launcher源代码,增加/注册了新的广播接收器用来接收应用发送来的未读消息数广播,接收到广播后,系统将未读消息的数目显示事件交给Launcher去处理,调用相关方法去重绘应用的icon,最终达到动态更新应用图标的效果。

示例

源代码

public class MainActivity extends Activity {
      //必须使用,Activity启动页
      private final static String lancherActivityClassName = Welcome.class.getName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.common_listview_layout);
    }

    @Override
    protected void onResume() {
        super.onResume();
        sendBadgeNumber();
    }

    private void sendBadgeNumber() {
        String number = "35";
        if (TextUtils.isEmpty(number)) {
            number = "0";
        } else {
            int numInt = Integer.valueOf(number);
            number = String.valueOf(Math.max(0, Math.min(numInt, 99)));
        }

        if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) {
            sendToXiaoMi(number);
        } else if (Build.MANUFACTURER.equalsIgnoreCase("samsung")) {
            sendToSony(number);
        } else if (Build.MANUFACTURER.toLowerCase().contains("sony")) {
            sendToSamsumg(number);
        } else {
            Toast.makeText(this, "Not Support", Toast.LENGTH_LONG).show();
        }
    }

    private void sendToXiaoMi(String number) {
        NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = null;
        boolean isMiUIV6 = true;
        try {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setContentTitle("您有"+number+"未读消息");
            builder.setTicker("您有"+number+"未读消息");
            builder.setAutoCancel(true);
            builder.setSmallIcon(R.drawable.common_icon_lamp_light_red);
            builder.setDefaults(Notification.DEFAULT_LIGHTS);
            notification = builder.build();
   //以上代码为notification的初始化信息,在实际应用中,可以单独使用

            Class miuiNotificationClass = Class.forName("android.app.MiuiNotification");
            Object miuiNotification = miuiNotificationClass.newInstance();
            Field field = miuiNotification.getClass().getDeclaredField("messageCount");
            field.setAccessible(true);

            field.set(miuiNotification, number);// 设置信息数
            field = notification.getClass().getField("extraNotification");
            field.setAccessible(true);

            field.set(notification, miuiNotification);
        Toast.makeText(this, "Xiaomi=>isSendOk=>1", Toast.LENGTH_LONG).show();
        }catch (Exception e) {
            e.printStackTrace();
            //miui 6之前的版本
            isMiUIV6 = false;
                Intent localIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE");
                localIntent.putExtra("android.intent.extra.update_application_component_name",getPackageName() + "/"+ lancherActivityClassName );
                localIntent.putExtra("android.intent.extra.update_application_message_text",number);
                sendBroadcast(localIntent);
        }
        finally
        {
          if(notification!=null && isMiUIV6 )
           {
               //miui6以上版本需要使用通知发送
            nm.notify(101010, notification);
           }
        }

    }

    private void sendToSony(String number) {
        boolean isShow = true;
        if ("0".equals(number)) {
            isShow = false;
        }
        Intent localIntent = new Intent();
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE",isShow);//是否显示
        localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME",lancherActivityClassName );//启动页
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", number);//数字
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME",getPackageName());//包名
        sendBroadcast(localIntent);

        Toast.makeText(this, "Sony," + "isSendOk", Toast.LENGTH_LONG).show();
    }

    private void sendToSamsumg(String number)
    {
        Intent localIntent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
        localIntent.putExtra("badge_count", number);//数字
        localIntent.putExtra("badge_count_package_name", getPackageName());//包名
        localIntent.putExtra("badge_count_class_name",lancherActivityClassName ); //启动页
        sendBroadcast(localIntent);
        Toast.makeText(this, "Samsumg," + "isSendOk", Toast.LENGTH_LONG).show();
    }
}

AndroidMainfest.xml配置

注意lancherActivityClassName 必须被配置为 启动页 android.intent.category.LAUNCHER

 <activity
            android:name="com.sample.activites.Welcome"
            android:configChanges="locale|keyboard|screenSize"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT" />
            </intent-filter>
        </activity>

MIUI 桌面角标官方开源代码简介

MIUI 6上重新设计了桌面app图标的角标显示,基本规则如下:

基本介绍

  • 默认的情况
    当app 向通知栏发送了一条通知 (通知不带进度条并且用户可以删除的),那么桌面app icon角标就会显示1.此时app显示的角标数是和通知栏里app发送的通知数对应的,即向通知栏发送了多少通知就会显示多少角标。
  • 通知可以定义角标数
    例如 有5封未读邮件,通知栏里只会显示一条通知,但是想让角标显示5. 可以在发通知时加个标示。
    实现代码

第三方app需要用反射来调用,参考代码:

NotificationManager mNotificationManager = (NotificationManager) this

.getSystemService(Context.NOTIFICATION_SERVICE);

Notification.Builder builder = new Notification.Builder(this)

.setContentTitle(“title”).setContentText(“text”).setSmallIcon(R.drawable.icon);

Notification notification = builder.build();

try {

Field field = notification.getClass().getDeclaredField(“extraNotification”);

Object extraNotification = field.get(notification);

Method method = extraNotification.getClass().getDeclaredMethod(“setMessageCount”, int.class);

method.invoke(extraNotification, mCount);

} catch (Exception e) {

e.printStackTrace();

}

mNotificationManager.notify(0,notification);

封装为工具类

注意:示例源代码中MIUI系统的功能实现和官方介绍的方法不一样,工具类使用的时速官方介绍的方法

这个工具类,是参考这篇博客,MIUI系统的我改了一下,测试可以,条件有限,sony和三星未测试

工具类下载地址:http://download.csdn.net/detail/xx326664162/9484065

package cn.hdnc.BadgeUtil;

import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.widget.Toast;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 应用启动图标未读消息数显示 工具类  (效果如:QQ、微信、未读短信 等应用图标)<br/>
 * 依赖于第三方手机厂商(如:小米、三星)的Launcher定制、原生系统不支持该特性<br/>
 * 该工具类 支持的设备有 小米、三星、索尼【其中小米、三星亲测有效、索尼未验证】
 * @author [email protected]
 *
 */
public class BadgeUtil {

    /**
     * Set badge count<br/>
     * 针对 Samsung / xiaomi / sony 手机有效
     * @param context The context of the application package.
     * @param count Badge count to be set
     */
    public static void setBadgeCount(Notification notification,Context context, int count) {
        if (count <= 0) {
            count = 0;
        } else {
            count = Math.max(0, Math.min(count, 99));
        }

        if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) {
            sendToXiaoMi(notification, context, count);
        } else if (Build.MANUFACTURER.equalsIgnoreCase("sony")) {
            sendToSony(context, count);
        } else if (Build.MANUFACTURER.toLowerCase().contains("samsung")) {
            sendToSamsumg(context, count);
        } else {
            Toast.makeText(context, "Not Support", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 向小米手机发送未读消息数广播
     * @param count
     */
    private static void sendToXiaoMi(Notification notification,Context context, int count) {
        try {
//            Class miuiNotificationClass = Class.forName("android.app.MiuiNotification");
//            Object miuiNotification = miuiNotificationClass.newInstance();
//            Field field = miuiNotification.getClass().getDeclaredField("messageCount");
//            field.setAccessible(true);
//            field.set(miuiNotification, String.valueOf(count == 0 ? "" : count));  // 设置信息数-->这种发送必须是miui 6才行

            Field field = notification.getClass().getDeclaredField("extraNotification");

            Object extraNotification = field.get(notification);

            Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);

            method.invoke(extraNotification, count);

        } catch (Exception e) {
            e.printStackTrace();
            // miui 6之前的版本
            Intent localIntent = new Intent(
                    "android.intent.action.APPLICATION_MESSAGE_UPDATE");
            localIntent.putExtra(
                    "android.intent.extra.update_application_component_name",
                    context.getPackageName() + "/" + getLauncherClassName(context));
            localIntent.putExtra(
                    "android.intent.extra.update_application_message_text", String.valueOf(count == 0 ? "" : count));
            context.sendBroadcast(localIntent);
        }
    }

    /**
     * 向索尼手机发送未读消息数广播<br/>
     * 据说:需添加权限:<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" /> [未验证]
     * @param count
     */
    private static void sendToSony(Context context, int count){
        String launcherClassName = getLauncherClassName(context);
        if (launcherClassName == null) {
            return;
        }

        boolean isShow = true;
        if (count == 0) {
            isShow = false;
        }
        Intent localIntent = new Intent();
        localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE",isShow);//是否显示
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME",launcherClassName );//启动页
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(count));//数字
        localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());//包名
        context.sendBroadcast(localIntent);
    }

    /**
     * 向三星手机发送未读消息数广播
     * @param count
     */
    private static void sendToSamsumg(Context context, int count){
        String launcherClassName = getLauncherClassName(context);
        if (launcherClassName == null) {
            return;
        }
        Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
        intent.putExtra("badge_count", count);
        intent.putExtra("badge_count_package_name", context.getPackageName());
        intent.putExtra("badge_count_class_name", launcherClassName);
        context.sendBroadcast(intent);
    }

    /**
     * 重置、清除Badge未读显示数<br/>
     * @param context
     */
    public static void resetBadgeCount(Notification notification,Context context) {
        setBadgeCount(notification, context, 0);
    }

    /**
     * Retrieve launcher activity name of the application from the context
     *
     * @param context The context of the application package.
     * @return launcher activity name of this application. From the
     *         "android:name" attribute.
     */
    private static String getLauncherClassName(Context context) {
        PackageManager packageManager = context.getPackageManager();

        Intent intent = new Intent(Intent.ACTION_MAIN);
        // To limit the components this Intent will resolve to, by setting an
        // explicit package name.
        intent.setPackage(context.getPackageName());
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        // All Application must have 1 Activity at least.
        // Launcher activity must be found!
        ResolveInfo info = packageManager
                .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

        // get a ResolveInfo containing ACTION_MAIN, CATEGORY_LAUNCHER
        // if there is no Activity which has filtered by CATEGORY_DEFAULT
        if (info == null) {
            info = packageManager.resolveActivity(intent, 0);
        }

        return info.activityInfo.name;
    }

}

拓展

https://github.com/leolin310148/ShortcutBadger

克隆这个项目,可能会碰到如下两个问题:
http://blog.csdn.net/xx326664162/article/details/51083400
http://blog.csdn.net/xx326664162/article/details/51087827

测试发现小米手机不能实现角标功能,其它手机暂未测试



又在网上搜索了好久,感觉这个还不错,还没有亲测
http://www.jianshu.com/p/0992ff9eeeb6

2楼xx326664162昨天 17:27
首先很感谢你,我也是刚刚才弄好,但是github上的那个类库,小米手机的不能使用
1楼qy_qy_qy昨天 12:20
github的有用啊 我直接把他的类copy的
相关文章
  • Android系统  应用图标展示未读消息数(BadgeNumber) 桌面app图标的角标显示 Android系统 应用图标展示未读消息数(BadgeNumber) 桌面app图标的角标显示

    Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示 参考: http://dev.xiaomi.com/doc/p=3904/index.html http://my.oschina.net/ososchina/blog/352286?p=1#comments https://github.com/leolin310148/ShortcutBadger http://www.voidcn.com/blog/kongbaidepao/article/p-

  • Android系统  应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示 Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

    Android系统 小米,三星,索尼手机发送桌面快键提醒数字图标,在Android系统中,众所周知不支持BadgeNumber,虽然第三方控件BadgeView可以实现应用内的数字提醒. 但对于系统的图标,特别是app的logo图标很难实现数字标志,即使是绘图的方式不断修改,但这种方式天生弊端,实用性很差.但幸运的是,某些ROM厂商提供了私有的API,但也带来了难度,API的不同意意味着代码量的增加和兼容性问题更加突出. 我们现在来实现桌面logo或者说icon右上角的图标,先来看2张图,第一张

  • Android系统 小米/三星/索尼 应用启动图标未读讯息数(BadgeNumber)动态提醒 Android系统 小米/三星/索尼 应用启动图标未读讯息数(BadgeNumber)动态提醒

    Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒 在Android手机上,如QQ.微信当有未读消息的时候.我们可以看到在应用的启动图标的右上角会有一个红色圈圈.且圈圈里会动态显示未读消息的数目,如下图显示: 那么该功能是怎么实现的呢? 在万能的互联网搜索和翻阅了大量相关资料.也请教了一些技术群里的大咖们.从他们那里我获知.提取了一些关键词:第三方控件BadgeView(实现应用内的数字提醒).快捷图标.Launcher.反射. 零零碎碎的花费了近一天

  • 手机QQ快速取消图标下未读消息的数字的方法 手机QQ快速取消图标下未读消息的数字的方法

    手机QQ是很多手机用户常用的社交软件,不过,有时候手机QQ一段时间没开,再打开手机QQ,就会在图标的右下角显示50条未读信息,甚至是上百条信息,那么,QQ图标右下角未读信息的数字怎么除掉呢?其实,只需要一键将未读信息变成已读就可以了,下面就一起来看看今天的手机QQ使用教程吧! 手机QQ 手机QQ快速取消图标上未读消息的数字: 1.开手机,就会看到很多未读的提示,图上角就是有52个未读的. 2.进去后,是不是看到很多未读的,如果要一个一个进去读,是不是很麻烦.你把手按住到显示数字的位置. 3.可以

  • 想找个小伙伴一起做一个微信头像 一条未读消息的 头像生成 app。

    虽然是个很简单的app,但是总觉得和小伙伴一起干活不累.想一起研究的刷我头像. --cut-- yx30在2014-08-25 16:36:4回答到: 已扫lz头像了 kingliangyingjun在2014-08-25 16:58:3回答到: 想跟着学行么-已扫 aoom在2014-08-25 18:06:0回答到: @yx30 @kingliangyingjun 到群里大家一起想办法吧

  • Android 桌面图标右上角显示未读消息数字

    背景: 在Android原生系统中,众所周知不支持桌面图标显示未读消息提醒的数字,虽然第三方控件BadgeView可以实现应用内的数字提醒.但对于系统的图标,特别是app的logo图标很难实现数字标志,即使是绘图的方式不断修改,但这种方式天生弊端,实用性很差.但幸运的是,一些强大的手机厂商(小米,三星,索尼)提供了私有的API,但也带来了难度,API的不同就意味着代码量的增加和兼容性问题更加突出. 现在我们来看看他们是如何实现的: 实现原理: 首先我们要明白 并不是应用本身处理对启动图标进行修改

  • 未读消息通知逻辑上应该如何做

    未读消息通知逻辑上应该怎么做? 场景就是当平台有各种新的消息通知时,平台内的成员会有未读消息的提醒. 我本来的思路是给成员一个notice的字段,默认为空,用来记录未读消息.每当平台有新消息发布时,所有成员的notice就添加该消息的id,最终notice的结构为$id,$id,$id,.有几个,就意味着有几条未读消息,然后遍历出对应的每条消息的id,当点击浏览此信息的时候,就从notice中去除对应的$id,. 这种思路合理吗?或者更好的思路是什么? --cut-- 你要的这种消息系统只是一个

  • 微信怎么快速追踪未读消息 微信怎么快速追踪未读消息

    微信怎么快速追踪未读消息? 1)首先点开微信,进入消息界面后双击左下方的[微信]图标,即可快速锁定当前未读的消息;(如下图) 2)接着再次双击[微信]图标,即可快速追踪到已被排在后面的下一个未读消息.(如下图)

  • 请教关于手机 QQ 和 PC_QQ 未读消息 Push 同步的问题

    各位朋友,晚上好.请教一下一个疑惑了很久的问题. 当我的 PC 版 QQ "不活跃"(如不在线)时,我的 iOS 版 QQ 就会收到未读消息的 Push ,这个时候,我不去对 iPhone 做任何的操作,而是打开了 PC 版的 QQ 去接收这些未读的消息,这时候我发现我 iPhone 锁屏界面上的那些 QQ 未读消息的 Push 会自动消失.请问这个是什么原理?或者能否介绍一下相关的思路? 这个功能蛮实用的,因为有时候运营人员会推送错误的消息,如果可以实现对 Push 的"召

  • 求消息即时提醒 未读消息个数的思路。

    例如,未读消息(6) ,当其他人发消息给该用户的时候 就会马上刷新未读消息个数,该功能应该怎样才能实现. 是定时提交数据,还是用websock? 如果是定时提交ajax的话console里面就会不厌其烦的反复出现服务器的返回值 求大神们给个思路.. --cut--

  • 微信未读消息生成器链接是什么 微信未读消息生成器链接是什么

    微信好友未读消息怎么生成?下面百事网小编为大家带来一种新的装逼模式,你的微信聊天界面将显示一大堆未读消息,内容自定义,超级酷炫哦!将这些微信唯独消息截图到朋友圈,瞬间高大上!下面就和小编一起来看看微信好友未读消息生成方法吧. 1.首先,我们来看看微信未读消息的截图,当你将这样一组聊天画面截图到朋友圈时,是不是会让人觉得你的人气特别高?那么,这张图片是怎么生成的呢? 2.在通过小编给的装逼生成器链接后,相信大家已经进入到图下的画面,微信未读消息需填写内容分别是:手机时间.运营商(你手机号是什么运营

  • 手机qq未读消息快速如何消除 手机qq未读消息快速如何消除

    打开手机QQ,然后找到那个未读消息的提醒小圆点,按住小圆点并拖动,然后松开手,小圆点就消失了.

  • 微信5.0.3怎么把消息标为未读消息 微信5.0.3怎么把消息标为未读消息

    本文章来给各位同学介绍一下微信5.0.3怎么把消息标为未读消息,希望此教程对各位同学会有所帮助哦. 1)打开微信软件,进入微信后找到并点击你要标为未读的消息,然后向左或向右滑动消息.(如下图所示) 2)滑动后点击标为未读,那么此条消息就标为未读了.(如下图所示)

  • 手机qq未读消息怎么消除? 手机qq未读消息快速消除方法 手机qq未读消息怎么消除? 手机qq未读消息快速消除方法

    手机qq未读消息怎么消除呢?这个只有QQ5.0版本才增加了一个快速消除未读提醒了,以前版本我们只有一条条删除才可以,现在不需要了可以一键操作,具体操作步骤如下. 打开手机QQ,然后找到那个未读消息的提醒小圆点,按住小圆点并拖动,然后松开手,小圆点就消失了. 好了,这个功能虽然好用如果你有重要消息这样一键就删除了,所以功能要用到位了哦.

  • wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果 wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果

    这一篇带来一个 两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 老规矩,先上效果图: qq的未读消息去除很炫酷,其实就是用了两条贝塞尔曲线,我们按思路来,先来画两个圆,及两条贝塞尔曲线,辅助点为圆心y坐标的一半.我们把下面移动的圆,叫做mMoveCircle. 这样一画,就很简单明了了对不对.只要在拖动的时候 去改变辅助点的Y,和固定圆的半径, 就可以出来如效果图的效果. 那么重写onTouchEvent @Override public boolean onTouchEvent(Motio

  • wing带你玩转自定义view系列(二) 简单模仿qq未读消息去除效果 wing带你玩转自定义view系列(二) 简单模仿qq未读消息去除效果

    wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果 上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个 两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50503630 老规矩,先上效果图: qq的未读消息去除很炫酷,其实就是用了两条贝塞尔曲线,我们按思路来,先来画两个圆,及两条贝塞尔曲线,辅助点为圆心y坐标的一半.我们把下面移动的圆,叫做mM

  • 微信怎么标记未读消息?微信标记未读消息操作方法教程 微信怎么标记未读消息?微信标记未读消息操作方法教程

    微信消息怎么标为未读消息?微信日前更新了5.0.3,在微信5.0.3中增加了可以将消息标为未读功能,但是很多朋友都不知道这个功能要怎么使用.下面就和统一小编一起来看看微信消息标为未读消息方法教程吧~ 1)打开微信软件,进入微信后找到并点击你要标为未读的消息,然后向左或向右滑动消息.(如下图所示) 2)滑动后点击标为未读,那么此条消息就标为未读了.(如下图所示)

  • 微信怎么快速查看未读消息 微信怎么快速查看未读消息

    微信快速翻看未读消息方法 我们只需双击一下底部左下角的"微信"按钮,就能自动定位到未看的消息了. 如果还想查看更多未读消息,接着双击微信按钮会自动往下移动,一直到未读消息查看完毕.

  • 微信怎么查看未读消息 微信怎么查看未读消息

    微信快速翻看未读消息方法 我们只需双击一下底部左下角的"微信"按钮,就能自动定位到未看的消息了. 如果还想查看更多未读消息,接着双击微信按钮会自动往下移动,一直到未读消息查看完毕.

  • 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)? 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?

    手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上就是基于一个图片产生的 , 第一种是动态生成图标(不过感觉比较费事且也消耗资源) , 建议方式是预先定义从0到99这100个图标(0就是不显示消息数 , >=99的就用99代替); 获取用户的未处理消息数(根据业务情况产生 , 这里不是重点 , 直接用一个数值模拟即可); 先判断该App桌面图标是否

最新文章
  • iPhone 6 在美国买,国内直营店不保修吗?

    之前问过macbook是全球联保,但是有人说iphone不一样 那我在美国官网买的ip6,回国可以在直营店享受保修吗?? 希望有这方面经验的v友说一下,谢谢 --cut-- Sylv在2014-11-13 04:49:1回答到: 按我的经验是不保的,曾经拿国行到加国和加行到国内都是不给保的,得付费维修 部分原因是各国的 iPhone 的型号是有不同的,iPhone 维修基本都是整机或部分更换,没有对应型号就没法给你修 applelove在2014-11-13 05:57:0回答到: @Sylv

  • Android 中 key 的名字一般怎么存放?

    比如在每个 bundle 里存放的一些 key pair strings, 是应该放在string.xml里呢,还是单独建一个api_string.xml这样的呢,还是靠大脑记住什么的... 表示比较虚,不知道怎么放>< --cut-- hahasong在2016-05-09 02:03:57回答到: 放在相应的 Fragment 或者 Activity 里,声明成静态常量,值通常用当前 Class 完整包名.keyName 20015jjw在2016-05-09 02:03:57回答到: @

  • 离开雷锋的日子观后感500字

    <离开雷锋的日子>讲述了雷锋的战友乔安山的故事,主人公乔安山作为雷锋的战友始终坚持雷锋精神,把雷锋班长作为心中的榜样,并默默传承着雷锋精神. "学习雷锋好榜样,忠于革命忠于党--"是啊!说起雷锋,真的是家喻户晓啊!他的精神真的值得我们学习.雷锋的名字响彻中华大地,雷锋的故事人们耳熟能详.虽然他离开我们的日子已经很久远了.但为人民服务的雷锋精神却成了我们时代精神的象征. 在故事和现实中,乔安山被误解,被诬陷,但"雷锋"却从来没有离开他,也正是雷锋精神支持他

  • 最新关于端午节的作文500字

    "五月五,是端阳.门插艾,香满堂.吃粽子,洒白糖.龙舟下水喜洋洋."听到这首儿歌,就让我想起了端午节.每年五月初五,是我国传统的节日--端午节. 端午节要插艾枝,悬艾虎.端午节这天一早,人们将艾枝插在门上,或用艾蒿编织成"艾虎",在门楣中央或带在身上,驱虫避邪,以保安康. 端午节要画门符.端午节这天,人们将蝎子.蜈蚣.毒蛇.蛤蟆.壁虎"五毒"形象的剪纸做门符.据说这样做,是为了驱"五毒",防瘟疫. 端午节要带香包.系五彩丝线.

  • 为何“谷”系列恶搞网站有市场

    从以前的"百谷虎"到现在的"谷姐""阿谷爸爸"等等网络恶搞越来越多,特别是最近的"谷姐"更是红红火火,从网易,新浪,腾讯,新华社等网络媒体到无数平面报纸的刊发,为什么有这么多免费媒体给"谷姐"做广告,而咱们小站长辛辛苦苦的运营着最近的网站连想要上个网易都难上加难?就已"谷姐"为例. "谷姐"火爆分析原因之一:美国当地时间1月12日15时,谷歌高级副总裁和首席法律顾问大

  • 周鸿祎:我不姓贾 不说假话 360手机边框最窄 周鸿祎:我不姓贾 不说假话 360手机边框最窄

    在8月26日360奇酷手机发布会上,360董事长周鸿祎拍着胸脯说"我不姓'贾',不说假话,360手机边框最窄!"用前一句实话,来证明后两句话有多么可靠. 不过,随后他又说:"360奇酷手机把6寸的屏幕放进了5.5寸的手机里",让人听起来很玄乎.他说:"我不会说360奇酷手机无边框,我是全球最窄边框,我们专门找夏普去订制了这么一款屏幕,做到了1.4mm目前全球最窄,这一点上,我觉得有一点点超越了苹果". 随后,他通过大屏幕展示了包括iPhone6

  • 设计师如何不依赖灵感进行设计工作? 设计师如何不依赖灵感进行设计工作?

    每天改改改,灵感从何来?今天分享一招不传之秘,只要做出了第一稿,之后的每个稿子都不用靠灵感了,可以通过一个早已规范好的流程设计出2.3稿,不是瞎掰,都是书上+实战的经验呢 >>> 梁木东:从我熟悉的平面设计说起吧. 不依赖灵感的设计,我觉得应该是真正意义上的设计.灵感和设计本质上,不是鱼和熊掌不可兼得的关系,相反,它们是互补的.举个栗子,当一位雇主把设计任务交给我后,我大概会做两到三个方案,第一个方案我一定是很认真做的,换句话说,第一个方案是有灵感的.但到第二.三个方案,它们大多是通过一

  • 读《大数据》随感 读《大数据》随感

    读<大数据>有感 <大数据>这本书并不是专业技术书籍,它更像是一部历史纪传体,描述了19世纪以来美国政府.社会.公民在信息IT技术潮流中扮演的角色及发挥的作用,从一个行业的视角反映了美国的民主文化.经济政治等客观因素对技术浪潮产生的影响和推动作用. 一.以法立国,以数治国 个人认为,当下的一个文明社会,首先应该是一个法制的社会.俗话说"无以规矩.不成方圆"就是这个道理.美国之所以敢以文明社会自居,离不了它们的立国根本"三权分立" 三种权利相互

  • Struts1、Struts2、Hibernate、Spring框架工作原理介绍 Struts1、Struts2、Hibernate、Spring框架工作原理介绍

    Struts1工作原理 Struts1工作原理图 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.(面向对象思想) 2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器. 3.form填充:struts的总控制器ActionServle

  • 图片保存速度有关问题

    求助图片保存速度问题 源码: with DM.adopic do begin close; open; append; Fieldbyname( 'weight_no ').AsString := s_no; TBlobField(FieldByName( 'p_photo ')).LoadFromFile( 'car.jpg '); post; close; end; 测试连本机数据库保存图片非常快 连接远程数据库服务器,数据保存非常快,但上面的图片保存非常慢(要几分钟),请教各位大虾可能原因

热门推荐
  • 这就是我的知乎回答 这就是我的知乎回答 在知乎上看到了一个提问,刚看完一个答案,刷新之后-- 其实我截取的两张图就是对这个知乎问题的回答. --cut-- hiths在2014-09-15 17:00:4回答到: 说的好像有点道理.. sunshower在2014-09-15 17:43:0回答到: 毕竟是国产的 maemual在2014-09-15 17:48:5回答到: 其实大家都不容易,在中国这样的环境下,想生存下去,不这样做,还能怎么办? 20150517在2014-09-15 19:12:0回答到: 毕竟想翻墙的人占少数,抗
  • 从阿凡达中学习职场技巧 从阿凡达中学习职场技巧 卡梅隆的<阿凡达>在全球范围内掀起了一股风潮,精彩的剧情和叹为观止的摄影技术让我们领略了潘多拉的美妙. 当然,对于这部电影,我们还可以从其他的角度来解读,就像网络上流行的<钉子户反对暴力拆迁>的说法一样.我则有另外一种解读:杰克从人类到纳美族人的转变,可以看成一家企业的员工跳槽到另一家后,从基层开始,凭借实力晋升到领导位置,最终战胜老东家的历程.如果从这个角度去看待电影,你会发现在杰克身上,有很多值得职场人学习的优点. 1:快速完成角色转变 来到一个新的环境,会因为不熟悉而产生紧张
  • 周迅《飘摇》歌词 周迅《飘摇》歌词 飘摇 - 周迅 词:郑华娟 曲:郑华娟 风停了云知道 爱走了心自然明了 他来时躲不掉 他走得静悄悄 你不在我预料 扰乱我平静的步调 怕爱了找苦恼 怕不爱睡不著 我飘啊飘 你摇啊摇 无根的野草 当梦醒了 天晴了 如何再飘摇 啊 爱多一秒 恨不会少 承诺是煎熬 若不计较 就一次 痛快燃烧 你不在我预料 扰乱我平静的步调 怕爱了找苦恼 怕不爱睡不著 我飘啊飘 你摇啊摇 无根的野草 当梦醒了 天晴了 如何再飘摇 啊 爱多一秒 恨不会少 承诺是煎熬 若不计较 就一次 痛快燃烧 我飘啊飘 你摇啊摇 无根的野
  • 寒衣节是什么意思 寒衣节是什么意思 寒衣节是什么意思 "十月一,送寒衣".农历十月初一,谓之"十月朝"."十月朔",又称"祭祖节"."烧衣节"."寒衣节".农历十月一日与春季的清明节.秋季的中元节,并称为中国一年之中的三大鬼节. 春夏秋冬往复循环,十月为孟冬.十月一日是进入寒冬季节的第一天.由生者的御寒加衣,想到死者的防冷需要.于是产生了"十月一,送寒衣"的风俗.在外地,有将纸裁成衣服的样子后烧掉的,在
  • 开学季拒绝换机:安卓清理大师让手机远离卡顿 开学季拒绝换机:安卓清理大师让手机远离卡顿 随着暑假假期结束,每年此时全国各地都会上演一番返校热潮,同时也掀起学生返校购物热潮.日前,来自一家社交网站的调查数据显示:在新学期需要购买的装备中,准备换手机的学生比例高达27.8%,综合来看,有接近7成的用户表示想换手机.电脑等数码设备. 对于很多学生而言,相对苹果动辄几千块的售价会更倾向于选择颇具性价比的安卓手机,但让人郁闷的是,由于安卓系统设计问题,一般手机使用时长超过半年就会出现各种运行卡顿现象,长久下来严重影响用户体验.这也是为什么开学季很多学生倾向于换机的原因之一,当然,安卓手机越用
  • 帝联科技受邀出席全国网络媒体技术联盟第七届年会 帝联科技受邀出席全国网络媒体技术联盟第七届年会 全国网络媒体技术联盟第七届年会于2016年1月13日至1月16日在黑龙江省哈尔滨市昆仑酒店隆重召开.帝联科技受邀出席大会,并发表了题为<帝联云平台助力互动新时代>的主题演讲. 据悉,全国网络媒体技术联盟第七届年会由全国网络媒体技术联盟(以下简称"网技联")主办,哈尔滨日报报业集团承办.该联盟在湖南红网.湖北荆楚网.黑龙江哈尔滨新闻网等多个网站技术负责人的共同倡议下成立,致力于做国内最完整.最实用.覆盖面最广的技术交流平台.自2009年起,网技联本着非营利目的,举办每年一度的
  • 升Win10后必做的9件事 升Win10后必做的9件事 Win10已经被小伙伴们玩嗨了,光是刚开始推送的两天就有将近6700万份的Win10被安装.当然就像之前很多微软系统一样,Win10装好后也有一些必须要做的工作.想不想知道都是哪些么?一起来看看吧. 1. 验证你的身份 Win10内含了一项超酷的功能,能够自动同步你在其他设备上保存过的帐号和密码.想一想刚刚在平板上保存的密码,下一秒就能在PC上打开,的确令人心动.不过,这项功能默认是没有在Win10上启用的,因此--你需要首先启动它. 验证你的身份 通知中心是启动密码自动同步的最简单途径,点击链