IM项目总结

作为一个Android初学者,这个项目算学到不少东西;随便总结总结,供以后参考

1.EventBus 1.0.1的使用;
 例:
    (1) XX1.java 触发EventBus事件;
        RefreshUnReadEvent refreshUnReadEvent = new RefreshUnReadEvent();//RefreshUnReadEvent相当于一个javaBean,可进行参数传递
        refreshUnReadEvent.setFromUserid(resp.getFromUserId());
        EventBus.getDefault().post(refreshUnReadEvent);
    (2) XX2.java 注册
        EventBus.getDefault().register(this, "refreshUnRead", RefreshUnReadEvent.class);
    (3) XX2.java 具体实现(此处的方法名需与注册的“refreshUnRead”保持一致)
        public void refreshUnReadMainThread(RefreshUnReadEvent event) {
            //event.getFromUserid()
        }
        
2.推送通知
    例:
    public void notifyUserMessage(String title, String content, Intent intent)
    {
        remove();
        if (mNotificationManager == null)
        {
            mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        }
        mNotification = new Notification(R.drawable.ic_launcher, content, System.currentTimeMillis());
        mNotification.setLatestEventInfo(mContext, title, content, getPendingIntentForMessage(intent));
        mNotification.flags |= Notification.FLAG_AUTO_CANCEL;//根据Notification.FLAG_AUTO_CANCEL 改变推送提示格式
        mNotificationManager.notify(NOTIFICATION_ID, mNotification);// 发起通知
    }
    
    public PendingIntent getPendingIntentForMessage(Intent intent)
    {
        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        return pendingIntent;
    }

3.广播Broadcast
    例:
    (1) XX1.java
        Intent clearUnreadIntent = new Intent(MTActions.CLEAR_CONVERSATION_UNREAD_COUNT_ACTION);
        clearUnreadIntent.putExtra("conversationType", Constants.DISCUSSION_CONVERSATION);
        clearUnreadIntent.putExtra("conversationId", discussion.getDiscussionId());
        mContext.sendBroadcast(clearUnreadIntent);
    (2) XX2.java
        private BroadcastReceiver mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (MTActions.CLEAR_CONVERSATION_UNREAD_COUNT_ACTION.equals(action)) {
                      //操作
                }
            }
        }
        //注册广播
         private void registerReceivers() {
            IntentFilter filter = new IntentFilter();
            filter.addAction(MTActions.CLEAR_CONVERSATION_UNREAD_COUNT_ACTION);
            registerReceiver(mReceiver, filter);
        }
        //注销广播
        unregisterReceiver(mReceiver);
        
4.左划删除(SwipeMenuListView)
    例:
    //此处只做删除操作,具体其它操作度娘
    (1)
    SwipeMenuCreator creator = new SwipeMenuCreator() {

        @Override
        public void create(SwipeMenu menu) {
            // create "delete" item
            SwipeMenuItem deleteItem = new SwipeMenuItem(
                    getApplicationContext());
            // set item background
            deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                    0x3F, 0x25)));
            // set item width
            deleteItem.setWidth(dp2px(70));
            // set a icon
            deleteItem.setIcon(R.drawable.ic_delete);
            // add to menu
            menu.addMenuItem(deleteItem);
        }
    };
    (2)
        private SwipeMenuListView mListView;
        mListView = (SwipeMenuListView) findViewById(R.id.lv_conversation);
        mListView.setMenuCreator(creator);
        mListView.setAdapter(mConversationListAdapter);
        mListView.setOnItemClickListener(this);
         mListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
                switch (index) {
                    case 0://左划删除
                        deleteViewList(position);
                        refresh();
                        break;
                }
                return false;
            }
        });

6.无法打包或者部分手机不兼容(超过65536,部分Android系统自动分包)
 (1)build.gradle文件
    defaultConfig{
        multiDexEnabled = true
    }
    dependencies {
        //添加支持multidex的兼容包
        compile 'com.android.support:multidex:1.0.0'
    }
 (2)MTApplication.java文件
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }
    
7.定时(最大61秒,从61-11开始10秒内,每1秒执行一次)
    CountDownTimer downTimer = new CountDownTimer(61000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            if (millisUntilFinished <= 11000 && millisUntilFinished > 0) {
                record_rl.setVisibility(View.GONE);
                rl_daojishi.setVisibility(View.VISIBLE);
                record_daojishi_text.setText(millisUntilFinished / 1000 + "");
            }
        }

        @Override
        public void onFinish() {
            rl_daojishi.setVisibility(View.GONE);
        }
    };

downTimer.start();//开始

downTimer.cancel();//结束
8.
    //按住说话,提示需动态切换图片
    Subscription subscription;
    int position = 0;
    int image[] = {R.drawable.img_yuyin1, R.drawable.img_yuyin2, R.drawable.img_yuyin3, R.drawable.img_yuyin};

    private void changeMicro() {
        if (subscription != null) {
            return;
        }
        record_img.setImageResource(image[0]);
        subscription = Observable.interval(300, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1() {
            @Override
            public void call(Long aLong) {
                if (subscription != null && !subscription.isUnsubscribed()) {
                    record_img.setImageResource(image[position % image.length]);
                    position++;
                }
            }
        });
    }
    //取消图片切换
    private void cancelMicro() {
        if (subscription != null) {
            subscription.unsubscribe();
            subscription = null;
            position = 0;
        }
        record_img.setImageResource(R.drawable.record_cancel);
    }    
    
9.textMessage.setAutoLinkMask(Linkify.ALL);

系统自带的高亮,ALL包括WEB_URLS、EMAIL_ADDRESSES、PHONE_NUMBERS、MAP_ADDRESSES

你可能感兴趣的:(IM项目总结)