Android 开发 知识点 疑难杂症

  1,对照片进行旋转

Bitmap bm0 = BitmapFactory.decodeByteArray(data, 0, data.length);

      Matrix m = new Matrix();

//可以是90度 180度 270度
      m.setRotate(90,(float) bm0.getWidth() / 2, (float) bm0.getHeight() / 2);
      final Bitmap bm = Bitmap.createBitmap(bm0, 0, 0, bm0.getWidth(), bm0.getHeight(), m, true);

      m.setRotate(90,(float) bm0.getWidth() / 2, (float) bm0.getHeight() / 2);

      final Bitmap bm = Bitmap.createBitmap(bm0, 0, 0, bm0.getWidth(), bm0.getHeight(), m, true);



2,

Camera中MediaStore.EXTRA_OUTPUT 遇到 无法返回的问题:

设置MediaStore.EXTRA_OUTPUT之后拍照无法返回的问题,有可能是你保存照片的文件名有问题比如我之前就想以时间来做文件名,名字包含“:”,这样转换为URI后会出现 特殊字符 ,拍照之后照片无法正确保存,进而在拍照页面点确定无法返回Activity 
解释: 问题与保存到缓存目录有关。也许这是一个 bug、 我的思念的权限或相机 app 只是不能保存到您的应用程序的私有数据目录。添加权限 FLAG_GRANT_WRITE_URI_PERMISSION 没有解决它。相关文章:从相机到专用应用程序高速缓存目录中存储图像保存到缓存时推出意图通过相机数据
解决方法 1:(亲测有效)
您可以使用:
//here,we 正在进行一个名为 picFolder 存储所采取的相机使用此应用程序的桌面文件夹
final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; 
    File newdir = new File(dir); 
    newdir.mkdirs();
        // here,counter will be incremented each time,and the picture taken by camera will be stored as 1.jpg,2.jpg and likewise.
        count++;
        String file = dir+count+".jpg";
        File newfile = new File(file);
        try {
            newfile.createNewFile();
        } catch (IOException e) {}       
        Uri outputFileUri = Uri.fromFile(newfile);
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
    }
   });
   }


  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
     if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
     Log.d("CameraDemo", "Pic saved");
  }
  }
注意: 在清单文件中,指定下列权限
  <uses-permission android:name="android.permission.CAMERA"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), “test.jpg”


在Android的app开发过程中,除了机型适配等问题,常常还会出一些特殊的bug,这些bug往往需要特殊的场景情况下才会发生,这里罗列了一些平时项目中遇到的问题及注意点。

参考地址:http://blog.csdn.net/cjpx00008/article/details/54922647


同步锁单例模式


public class Singleton {

    private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (uniqueInstance == null) {//注意,只有第一次才彻底执行这里的代码
            uniqueInstance = new Singleton();//延迟实例化 (lazy instantiaze)
        }
        return uniqueInstance;//如果uniqueInstance不是null,就表示之前创建过对象,
        // 我们就直接跳到return语句
    }
}
通过添加synchronized关键字到getInstance方法中,我们强迫每个进入线程中进入该方法的前提是别的线程离开该方法,不会有两个线程同时进入该方法。这种单例模式是线程安全的,不过synchronized会影响程序的性能,只有第一次执行该方法实例化的时候才需要同步,一旦设置好uniqueInstance就不再需要同步这个方法了。因此之后每次调用这个方法,synchronized都是一种累赘。

双重同步锁单例模式

public class Singleton {
    //volatile 关键词确保:当uinqueInstance变量被初始化成Singleton实例时,
    // 多个线程正确的处理uniqueInstance变量
    private volatile static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。

    private Singleton() {

    }
//防止多线程出错
    public static  Singleton getInstance() {//检查实例,如果不存在,进入同步区块。
        if (uniqueInstance == null) {//注意,只有第一次才彻底执行这里的代码
            synchronized (Singleton.class) {
                //进入区块后在检查一次,如果仍是null,才创建实例。
                if (uniqueInstance == null) {
                    uniqueInstance = new Singleton();//延迟实例化 (lazy instantiaze)
                }
            }
        }
        return uniqueInstance;//如果uniqueInstance不是null,就表示之前创建过对象,
        // 我们就直接跳到return语句
    }
}
想比同步锁单例模式,这种做法可以大大提高性能。
volatile 关键词:当uinqueInstance变量被初始化成Singleton实例时,多个线程正确的处理uniqueInstance变量。

用枚举实现单例模式

public enum Singleton {
    instance;
    private xxxxxx instance;
    Singleton () {
        instance = new xxxxxx ();
    }
    public xxxxxx getInstance() {
        return instance;
    }
}


查看keystore签名

1.定位到bin目录
2.运行命令行
keytool -list -v -keystore C:\Users\Sinaan\Desktop\2.0开发\xiyilangpda.keystore -storepass Xiyilangpda.cc
 
 
  • 1
  • 1

代表含义: 
C:\Users\Sinaan\Desktop\2.0开发\xiyilangpda.keystore : keystore的绝对路径 
Xiyilangpda.cc : keystore的密钥,注意不是alias。

MD5后面的一串去掉:,然后小写就是你需要的keystore签名。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值