就是下图这里的自动旋转屏幕开关,开启和关闭自动旋转系统会发送广播吗?什么广播?怎么监听它的状态改变?
Android 自动旋转屏幕快捷开关,系统会发送广播吗?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- zby_2015 2015-12-29 03:02关注
屏幕旋转开关:
1). 屏幕旋转开关设置主要调用android.provider.Settings.System的putInt和getInt方法实现。2). 通过ContentObserver来动态观察屏幕旋转设置的改变。 示例代码如下:
package com.example.srs;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;public class ScreenRotationSwitch extends Activity implements OnClickListener
{
private Button mRotationButton;private RotationObserver mRotationObserver; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //创建观察类对象 mRotationObserver = new RotationObserver(new Handler()); mRotationButton = (Button) findViewById(R.id.rotation); refreshButton(); mRotationButton.setOnClickListener(this); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //解除观察变化 mRotationObserver.stopObserver(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //注册观察变化 mRotationObserver.startObserver(); } //更新按钮状态 private void refreshButton() { if (getRotationStatus(this) == 1) { mRotationButton.setText(R.string.rotation_off); } else { mRotationButton.setText(R.string.rotation_on); } } //得到屏幕旋转的状态 private int getRotationStatus(Context context) { int status = 0; try { status = android.provider.Settings.System.getInt(context.getContentResolver(), android.provider.Settings.System.ACCELEROMETER_ROTATION); } catch (SettingNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return status; } private void setRotationStatus(ContentResolver resolver, int status) { //得到uri Uri uri = android.provider.Settings.System.getUriFor("accelerometer_rotation"); //沟通设置status的值改变屏幕旋转设置 android.provider.Settings.System.putInt(resolver, "accelerometer_rotation", status); //通知改变 resolver.notifyChange(uri, null); } @Override public void onClick(View v) { // TODO Auto-generated method stub if (getRotationStatus(this) == 1) { setRotationStatus(getContentResolver(), 0); } else { setRotationStatus(getContentResolver(), 1); } } //观察屏幕旋转设置变化,类似于注册动态广播监听变化机制 private class RotationObserver extends ContentObserver { ContentResolver mResolver; public RotationObserver(Handler handler) { super(handler); mResolver = getContentResolver(); // TODO Auto-generated constructor stub } //屏幕旋转设置改变时调用 @Override public void onChange(boolean selfChange) { // TODO Auto-generated method stub super.onChange(selfChange); //更新按钮状态 refreshButton(); Toast.makeText(ScreenRotationSwitch.this, "旋转屏幕设置有变化", Toast.LENGTH_SHORT).show(); } public void startObserver() { mResolver.registerContentObserver(Settings.System .getUriFor(Settings.System.ACCELEROMETER_ROTATION), false, this); } public void stopObserver() { mResolver.unregisterContentObserver(this); } }
}
权限添加:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥30 python代码,帮调试,帮帮忙吧