环信~单聊~登录~注册~退出登录~

1.首先你得找到一个依赖包,类似这样的


依赖

2.Application

public class App extends Application {
    protected static SharedPreferences sp = null;
    protected  static Context CONTEXT = null;
    private String spName = "HuanXinDemo";
    @Override
    public void onCreate() {
        super.onCreate();
        if (CONTEXT == null) {
            CONTEXT = getApplicationContext();
        }
        if (sp == null) {
            sp = CONTEXT.getSharedPreferences(spName, MODE_PRIVATE);
        }
        initIMsdk();
    }

    public static SharedPreferences getSp() {
        return sp;
    }
    /**
     * 注册IM
     */
    private void initIMsdk() {
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
        // 如果APP启用了远程的service,此application:onCreate会被调用2次
        // 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
        // 默认的APP会在以包名为默认的process name下运行,如果查到的process name不是APP的process name就立即返回
        if (processAppName == null ||!processAppName.equalsIgnoreCase(this.getPackageName())) {
            // 则此application::onCreate 是被service 调用的,直接返回
            return;
        }
        //EaseUI.getInstance().init(this,null);
        EMOptions options = new EMOptions();
        // 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);
        EaseUI.getInstance().init(this, options);
        EMClient.getInstance().setDebugMode(true);
    }
    /**
     * 获取appName
     * @param pID
     * @return
     */
    private String getAppName(int pID) {
        String processName = null;
        ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        List l = am.getRunningAppProcesses();
        Iterator i = l.iterator();
        PackageManager pm = this.getPackageManager();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pID) {
                    processName = info.processName;
                    return processName;
                }
            } catch (Exception e) {
                // Log.d("Process", "Error>> :"+ e.toString());
            }
        }
        return processName;
    }
}

3.Util

public class EaseUtil {
    /**
     * 用户登录
     *
     * @param username
     * @param password
     */
    public static void login(final Activity fromActivity, final Class toClazz, String username, String password) {
        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
            Toast.makeText(fromActivity, "用户名或者密码为空!", Toast.LENGTH_SHORT).show();
        } else {
            EMClient.getInstance().login(username, password, new EMCallBack() {//回调
                @Override
                public void onSuccess() {
                    fromActivity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(fromActivity, "登录成功!", Toast.LENGTH_SHORT).show();
                        }
                    });
                    Intent intent = new Intent(fromActivity, toClazz);
                    fromActivity.startActivity(intent);
                }

                /**
                 *
                 * @param progress //登录进度
                 * @param status  //登录状态
                 */
                @Override
                public void onProgress(int progress, String status) {
                }

                @Override
                public void onError(int code, final String message) {
                    fromActivity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(fromActivity, "登录失败," + message, Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            });
        }
    }

    /**
     * 用户注册
     *
     * @param userName
     * @param pasword
     */
    public static void registUser(final Activity fromActivity, final String userName, final String pasword) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    EMClient.getInstance().createAccount(userName, pasword);
                    SPUtils.put(userName, userName);
                    SPUtils.put(pasword, pasword);
                } catch (final HyphenateException e) {
                    e.printStackTrace();
                    fromActivity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(fromActivity, e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }).start();

    }


    /**
     * 退出登录
     */
    public static void loginOut(final Activity activity) {
        EMClient.getInstance().logout(true, new EMCallBack() {

            @Override
            public void onSuccess() {
                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(activity, "您已退出登录!", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onProgress(int progress, String status) {
            }

            @Override
            public void onError(int code, final String message) {
                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(activity, "退出失败," + message, Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }
}

4.MainXML



    
    
        
        
        
    
    
        
        
    
    
    
    


    

    

        

5.创建一个ChatActivity

public class ChatActivity extends AppCompatActivity {

    private EditText etId;

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

    }

    //点击开始聊天
    public void chat(View view) {
        String userId = etId.getText().toString().trim();
        if(userId!=null){
            EaseChatFragment chatFragment = new EaseChatFragment();
            Bundle args = new Bundle();
            args.putInt(EaseConstant.EXTRA_CHAT_TYPE, EaseConstant.CHATTYPE_SINGLE);
            args.putString(EaseConstant.EXTRA_USER_ID, userId);
            chatFragment.setArguments(args);
            getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
        }
    }

    private void initView() {
        etId = (EditText) findViewById(R.id.etId);
    }

    private void submit() {
        // validate
        String etIdString = etId.getText().toString().trim();
        if (TextUtils.isEmpty(etIdString)) {
            Toast.makeText(this, "请输入对方的id", Toast.LENGTH_SHORT).show();
            return;
        }

        // TODO validate success, do something

    }

}

6.Chat的xml




    

        

        

7.SpUtil

public class SPUtils {
    /**
     * 保存在手机里面的文件名
     */
    public static final SharedPreferences sp = App.getSp();

    /**
     * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
     *
     * @param key
     * @param object
     */
    public static void put(String key, Object object) {
        SharedPreferences.Editor editor = sp.edit();

        if (object instanceof String) {
            editor.putString(key, (String) object);
        } else if (object instanceof Integer) {
            editor.putInt(key, (Integer) object);
        } else if (object instanceof Boolean) {
            editor.putBoolean(key, (Boolean) object);
        } else if (object instanceof Float) {
            editor.putFloat(key, (Float) object);
        } else if (object instanceof Long) {
            editor.putLong(key, (Long) object);
        } else {
            editor.putString(key, object.toString());
        }

        SharedPreferencesCompat.apply(editor);
    }

    /**
     * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
     *
     * @param key
     * @param defaultObject
     * @return
     */
    public static Object get(String key, Object defaultObject) {

        if (defaultObject instanceof String) {
            return sp.getString(key, (String) defaultObject);
        } else if (defaultObject instanceof Integer) {
            return sp.getInt(key, (Integer) defaultObject);
        } else if (defaultObject instanceof Boolean) {
            return sp.getBoolean(key, (Boolean) defaultObject);
        } else if (defaultObject instanceof Float) {
            return sp.getFloat(key, (Float) defaultObject);
        } else if (defaultObject instanceof Long) {
            return sp.getLong(key, (Long) defaultObject);
        }

        return null;
    }

    /**
     * 移除某个key值已经对应的值
     *
     * @param key
     */
    public static void remove(String key) {
        SharedPreferences.Editor editor = sp.edit();
        editor.remove(key);
        SharedPreferencesCompat.apply(editor);
    }

    /**
     * 清除所有数据
     */
    public static void clear() {
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        SharedPreferencesCompat.apply(editor);
    }

    /**
     * 查询某个key是否已经存在
     *
     * @param key
     * @return
     */
    public static boolean contains(String key) {
        return sp.contains(key);
    }

    /**
     * 返回所有的键值对
     * @return
     */
    public static Map getAll() {
        return sp.getAll();
    }

    /**
     * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类
     */
    private static class SharedPreferencesCompat {
        private static final Method sApplyMethod = findApplyMethod();

        /**
         * 反射查找apply的方法
         *
         * @return
         */
        @SuppressWarnings({"unchecked", "rawtypes"})
        private static Method findApplyMethod() {
            try {
                Class clz = SharedPreferences.Editor.class;
                return clz.getMethod("apply");
            } catch (NoSuchMethodException e) {
            }

            return null;
        }

        /**
         * 如果找到则使用apply执行,否则使用commit
         *
         * @param editor
         */
        public static void apply(SharedPreferences.Editor editor) {
            try {
                if (sApplyMethod != null) {
                    sApplyMethod.invoke(editor);
                    return;
                }
            } catch (IllegalArgumentException e) {
            } catch (IllegalAccessException e) {
            } catch (InvocationTargetException e) {
            }
            editor.commit();
        }
    }

}  

8.MainAc

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tv_info;
    private EditText user_name;
    private ImageView img_clear_phone;
    private EditText user_pwd;
    private TextView mRegister;
    private TextView mForget;
    private Button btn_login;
    private Button btn_clear;
    private ProgressBar progressBar;

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

    private void initView() {
        tv_info = (TextView) findViewById(R.id.tv_info);
        user_name = (EditText) findViewById(R.id.user_name);
        img_clear_phone = (ImageView) findViewById(R.id.img_clear_phone);
        user_pwd = (EditText) findViewById(R.id.user_pwd);
        mRegister = (TextView) findViewById(R.id.mRegister);
        mForget = (TextView) findViewById(R.id.mForget);
        btn_login = (Button) findViewById(R.id.btn_login);
        btn_clear = (Button) findViewById(R.id.btn_clear);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        img_clear_phone.setOnClickListener(this);
        btn_login.setOnClickListener(this);
        btn_clear.setOnClickListener(this);
        mRegister.setOnClickListener(this);
        user_name.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String s1 = s.toString();
                if(s1.equals("") || s1==null){
                    img_clear_phone.setVisibility(View.GONE);
                }else{
                    img_clear_phone.setVisibility(View.VISIBLE);
                }
            }
            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.img_clear_phone:
                user_name.setText("");
                break;
            case R.id.btn_login://登录
                submit();
                EaseUtil.login(MainActivity.this,ChatActivity.class,user_name.getText().toString(),user_pwd.getText().toString());
                break;
            case R.id.mRegister://注册
                submit();
                EaseUtil.registUser(MainActivity.this,user_name.getText().toString(),user_pwd.getText().toString());
                break;
            case R.id.btn_clear:
                EaseUtil.loginOut(MainActivity.this);
                break;
        }
    }

    private void submit() {
        // validate
        String name = user_name.getText().toString().trim();
        if (TextUtils.isEmpty(name)) {
            Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
            return;
        }

        String pwd = user_pwd.getText().toString().trim();
        if (TextUtils.isEmpty(pwd)) {
            Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
            return;
        }

        // TODO validate success, do something

    }


}

.App   OK.

9.Manifest




    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    
        
            
                

                
            
        

        
        
        
        
        
            
                

                
            
            
            
                
                
            
        

        
        

        
        
        
        
        
    


你可能感兴趣的:(环信~单聊~登录~注册~退出登录~)