一、振动
(1)、<uses-permission android:name="android.permission.VIBRATE"/>
( 2)、开启
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(100);
或
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
long[] pattern = {500, 500, 500, 500}; // 单数为停止双数为振动时长
vibrator.vibrate(pattern, -1); //-1为不重复,非-1为从pattern指定下标开始重复
(3)、关闭
if(null != vibrator) {
vibrator.cancel();
}
二、在窗口中添加View
WindowManager mWn = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
params.verticalMargin=0.15f;
params.setTitle("Toast");
if(mView.getParent() != null){
mWn.removeView(mView);
}
mWn.addView(mView, params);
三、调用照相功能
private int ID_ACTIVITY_XIANGJI = 3;
private File sdcardTempFile = new File("/mnt/sdcard/", "pic" + SystemClock.currentThreadTimeMillis() + ".jpg");
((Button) findViewById(R.id.btn)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri uri = Uri.fromFile(sdcardTempFile);
intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", true);
startActivityForResult(intent, ID_ACTIVITY_XIANGJI);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
if(requestCode == ID_ACTIVITY_XIANGJI) {
try {
Uri xiangji_uri = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), sdcardTempFile.getAbsolutePath(), null, null));
Log.d("zhang", xiangji_uri.getPath());
ContentResolver xiangji_cr = this.getContentResolver();
Bitmap bmp = BitmapFactory.decodeStream(xiangji_cr.openInputStream(xiangji_uri));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
android:configChanges="orientation|keyboardHidden"
四、Service中创建窗口显示(TYPE_SYSTEM_ALERT, TYPE_SYSTEM_OVERLAY)
有时候需要在显示UI的时候不中断原来的Activity比如在播放视频时或者玩游戏时,需要显示某个菜单(可以是系统提示,或类似于TV菜单),显然用Activity来做是不行的,因为新Activity启动的时候会把原来的Activity pause掉,怎么做呢,可以参考系统电量提示窗口或statusbar那样在service中启动窗口,新窗口将会出现在UI最上层,但不会中断原来的Activity
设置Window属性:
1、getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
2、getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
所需权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
区别:
system_alert窗口可以获得焦点,响应操作
system_overlay窗口显示的时候焦点在后面的Activity上,仍旧可以操作后面的Activity