一、android实用代码段(持续更新)

原创 2015年11月18日 16:07:28

常用的代码片段

1.双击回退按钮退出程序

    boolean isExit = false;

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.e(TAG + "======", "keyback====");
            if (!isExit) {
                isExit = true;
                Toast.makeText(m_context, R.string.exit_str, Toast.LENGTH_SHORT)
                        .show();
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        isExit = false;
                    }
                }, 2000);
                ;

                return false;

            } else {
                Log.e(TAG + "======", "退出应用");
                android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(0);
                //
            }
        }

        return false;
    }

2.拍照或者相册选择照片

    private static final int PICK_PHOTO_FOR_AVATAR = 1024;
    private static final int TAKE_PHOTO_FOR_AVATAR = 110;
    Uri originalUri;
    private void selectPhotoFromGallery() {
        // Create intent for picking a photo from the gallery

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);
    }

    private void getPhotoFromCamera() {
        // 调用相机
        Intent mIntent = new Intent("android.media.action.IMAGE_CAPTURE");
        // 图片存储路径,可自定义
        File tmpFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg");
        // 获取这个图片的URI
        originalUri = Uri.fromFile(tmpFile);//这是个实例变量,方便下面获取图片的时候用
        mIntent.putExtra(MediaStore.EXTRA_OUTPUT, originalUri);
        startActivityForResult(mIntent, TAKE_PHOTO_FOR_AVATAR);
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK) {
            return;
        }
        ;


        switch (requestCode) {
            case PICK_PHOTO_FOR_AVATAR:
                InputStream inputStream = null;
                if (data == null) return;
                try {
                    inputStream = getContentResolver().openInputStream(data.getData());
                    userHeadIv.setImageBitmap(BitmapFactory.decodeStream(inputStream));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                break;
            case TAKE_PHOTO_FOR_AVATAR:
                try {
                    FileInputStream fileInput = (FileInputStream) getContentResolver().openInputStream(Uri.parse(originalUri.toString()));
//                    inputStream = getContentResolver().openInputStream(data.getData());
                    userHeadIv.setImageBitmap(BitmapFactory.decodeStream(fileInput));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                break;
            default:

                break;

        }

3.文件拷贝

    private void inputStream2File(InputStream ins, File file) {
//        File file = new File(path);
        OutputStream outputStream = null;
        try {

            outputStream = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] bytes = new byte[1024];
            int read = 0;
            while ((read = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
            }
            outputStream.close();
//            ins.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

4.获取视频的第一帧图片

    public static Bitmap getVideoFirstFrame(String localPath){
        Bitmap bitmap = null;
        if (TextUtils.isEmpty(localPath)){
            LogUtil.error(Constants.TAG,"getVideoFirstFrame localPath is null");
            return bitmap;
        };

        File file = new File(localPath);
        if (!file.exists()){
            LogUtil.error(Constants.TAG,"getVideoFirstFrame file is not exists");
            return bitmap;
        }
        MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象
        mmr.setDataSource(localPath);
        Bitmap firstFramBitmap = mmr.getFrameAtTime();
        return firstFramBitmap;

    }

5.根据秒来获取小时、分钟、秒

    public static String getTimeStrBySecond(long second) {
        int hour = (int)second/3600;
        int m = (int)(second-hour*3600)/60;
        int s= (int)(second-hour*3600- m*60) ;
        String hh = hour<10?"0"+hour:hour+"";
        String mm = m < 10 ? "0"+m: m+"";
        String ss = s < 10 ? "0"+s: s+"";
        String timeStr = hh+":"+ mm+":"+ss;
        return timeStr;
    }

6.监听键盘状态

ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener =  new ViewTreeObserver.OnGlobalLayoutListener() {
        private boolean isKeyboardUp;

        @Override
        public void onGlobalLayout() {
            final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
            Rect r = new Rect();
            rootView.getWindowVisibleDisplayFrame(r);
            int screenHeight = rootView.getRootView().getHeight();

            // r.bottom is the position above soft keypad or device button.
            // if keypad is shown, the r.bottom is smaller than that before.
            int keypadHeight = screenHeight - r.bottom;

            Log.d(TAG, "keypadHeight = " + keypadHeight);

            if (keypadHeight > screenHeight * 0.15) { // 0.15 ratio is perhaps enough to determine keypad height.
                // keyboard is opened
                linExtention.setVisibility(GONE);
            }
            else {
                // keyboard is closed
            }

        }
    };

7.inputStream to string

static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

8.点击隐藏键盘

 Rect mRect = new Rect();
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int action = MotionEventCompat.getActionMasked(ev);

        int[] location = new int[2];
        chatBottomview.getInputEt().getLocationOnScreen(location);
        mRect.left = location[0];
        mRect.top = location[1];
        mRect.right = location[0] + chatBottomview.getInputEt().getWidth();
        mRect.bottom = location[1] + chatBottomview.getInputEt().getHeight();

        int x = (int) ev.getX();
        int y = (int) ev.getY();

        if (action == MotionEvent.ACTION_DOWN && !mRect.contains(x, y)) {
            InputMethodManager input = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            input.hideSoftInputFromWindow(chatBottomview.getInputEt().getWindowToken(), 0);
        }
        return super.dispatchTouchEvent(ev);
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android实用插件,持续更新

把近几年开发android使用插件记录一下第一次写博客 PS:有点小激动额top:1 Android ButterKnife ZeleznyButterKnife是一个专注于Android系统的Vi...
  • hwholiday
  • hwholiday
  • 2017年02月27日 09:25
  • 196

Android 实用开源项目集合 持续更新

Android 万能的Adapter for ListView,RecyclerView,GridView等,支持多种Item类型的情况。 https://github.com/hongyangAn...
  • msn465780
  • msn465780
  • 2017年09月11日 17:24
  • 261

wordpress中的一些实用小插件(持续更新)

nice search 可以让在网页上的搜索更加的好看,比如你想搜索一个电影网站,search完之后地址栏的内容会有?等乱码,所以在下载完这个插件之后,会解决这个问题 wp Email login ...
  • u012810353
  • u012810353
  • 2015年03月23日 15:33
  • 418

实用工作经验总结-持续更新

1.ServletRequest获取不到Cookie   2014-07-23 一般yu a
  • u012888365
  • u012888365
  • 2014年07月23日 22:57
  • 731

Emacs实用Tips【持续更新】

Tips No.1: 不要纠结Vim好还是Emacs好。我认为Vim好!但是我的使用情景和你不同,不适用与你的情况啊。 我主要还是使用Vim的。当一个编辑器来使用Vim的。并不用来调试代码,打游戏...
  • iuhsihsow
  • iuhsihsow
  • 2017年12月24日 17:30
  • 123

Java一些实用的类(持续更新)

1  Runtime:中文意思是运行,在Java中他可以执行一些指定的命令,可以做到想dos命令行那样打开或者关闭某个程序或者完成其他一些操作;比如 Runtime runtime=Runtime.g...
  • li951418089
  • li951418089
  • 2015年12月24日 10:26
  • 111

java实用知识点[持续更新]

1,hudson持续集成,使用hudson.war这个项目就可以,里面有一些配置,一看就懂。关键点,构建方式,使用脚本、ant、还是maven自己选择,需要有相应的脚本。注:目前我使用的是ant,ma...
  • ndsafhhlk
  • ndsafhhlk
  • 2013年09月27日 15:46
  • 648

数据库的持续集成和版本控制

数据库的持续集成和版本控制 http://database.51cto.com   2008-02-26 10:57   张海龙   InfoQ中文站 我要评论(0) 摘要:版本...
  • weizhiai12
  • weizhiai12
  • 2013年01月24日 16:27
  • 384

java 时间操作 --持续更新

1、时间戳转为日期格式 public class Time{ public static void main(String args[]){ String time="138173032...
  • smile0198
  • smile0198
  • 2013年11月14日 19:36
  • 1169

Android的一些干货以及Android Studio的一些实用小技巧(持续更新)

干货/Android知识
  • zxdynamite
  • zxdynamite
  • 2017年08月08日 14:21
  • 424
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一、android实用代码段(持续更新)
举报原因:
原因补充:

(最多只允许输入30个字)