android 获取系统功能

本文详细介绍了在手机应用中实现振动效果的方法,包括权限申请、振动开启与关闭。同时,提供了如何在应用窗口中添加View的实例,并讨论了在不中断原有Activity的情况下调用照相功能的技术细节。最后,讲解了如何在Service中创建不同类型窗口显示的实现方式,以满足在播放视频或游戏时显示菜单的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、振动

         (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

                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值