android+程序配置信息,Android系统及当前应用配置操作信息相关的常用API

Android系统及当前应用配置操作信息相关的常用API

实际项目开发中,很多情况都要得到当前关于手机系统的一些信息及相关配置,比如监测手机屏幕方向,前后摄像头是否可用,是否开启导航功能

关于系统信息及当前应用程序配置的主要几个类

1、android.content.Context

2、android.content.res.Configuration

3、android.content.pm.ActivityInfo

4、android.app.Activity

5、android.os.Environment

6、android.content.res.Resources

7、android.content.res.AssetManager

8、android.content.pm.PackageManager

......

上述类的作用及关系图:

20bbe7ec5ed1d401d7daf4240617eb80.png

package com.yihui.commonapi;

import java.io.IOException;

import android.content.Context;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.content.pm.PackageManager.NameNotFoundException;

import android.content.res.AssetManager;

import android.content.res.Configuration;

import android.content.res.Resources;

import android.graphics.drawable.Drawable;

import android.os.Environment;

import android.test.AndroidTestCase;

import android.util.Log;

public class TestSystemInfoAPI extends AndroidTestCase {

private static final String TAG = "TestSystemInfoAPI";

public void testGetSystemInfo() throws IOException, NameNotFoundException{

Context context = getContext();

/* 当前app应用包、数据存储路径等信息 */

Log.i(TAG, "当前APP包名: " + context.getPackageName());

Log.i(TAG, "当前APP对应的APK所在路径: " + context.getPackageCodePath()); //等同getPackageResourcePath()

Log.i(TAG, "当前APP的FilesDir目录: " + context.getFilesDir().getAbsolutePath());

Log.i(TAG, "当前APP的CacheDir目录: " + context.getCacheDir().getAbsolutePath());

Log.i(TAG, "当前APP的SDCard目录: " + Environment.getExternalStorageDirectory().getAbsolutePath());

Log.i(TAG, "当前APP的RootDirectory目录: " + Environment.getRootDirectory().getAbsolutePath());

Log.i(TAG, "当前APP的DataDirectory目录: " + Environment.getDataDirectory().getAbsolutePath());

Log.i(TAG, "当前APP的DownloadCacheDirectory目录: " + Environment.getDownloadCacheDirectory().getAbsolutePath());

/* 当前应用APK管理信息,得到AndroidManifest.xml里面的配置及各个组件信息 */

PackageManager appPackageManager = context.getPackageManager();

PackageInfo appPackageInfo = appPackageManager.getPackageInfo(context.getPackageName(), 0);

Log.i(TAG, "当前APP应用的版本信息: " + appPackageInfo.versionCode);

/* res资源 */

Resources appResources = context.getResources();

//得到手机屏幕的密度值

Log.i(TAG, "当前手机屏幕密度值: " + appResources.getDisplayMetrics().density);

//通过res下面的资源对应的id得到对应的资源文件,类似的还可以得到color、Animation、Dimension、Values

Drawable resDrawble = appResources.getDrawable(R.drawable.ic_launcher);

//得到手机configuration一些配置信息

Configuration appConfiguration = appResources.getConfiguration();

Log.i(TAG, "当前手机屏幕方向:" + (appConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT ? "竖屏" : "横屏"));

/* assets资源:读取assets/music目录下面的文件列表 */

AssetManager appAssets = context.getAssets();

String[] assetsFiles = appAssets.list("music");

for(int i = 0 ; i < assetsFiles.length ; i++){

Log.i(TAG, "assetsFiles" + i + ": "+ assetsFiles[i]);

}

}

}

demo:得到系统的configuration信息,横竖屏幕的切换

布局文件:activity_main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:orientation="vertical"

tools:context=".MainActivity" >

android:id="@+id/btnSystemConfig"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="获取系统配置信息"/>

android:id="@+id/tvInfor"

android:layout_width="match_parent"

android:layout_height="0dip"

android:layout_weight="1"

android:background="#6666ffff"/>

示例代码:MainActivity.java

package com.yihui.commonapi;

import android.os.Bundle;

import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.content.res.Configuration;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

private static final String TAG = "MainActivity";

private TextView tvInfor;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tvInfor = (TextView) findViewById(R.id.tvInfor);

findViewById(R.id.btnSystemConfig).setOnClickListener(this);

}

@Override

public void onClick(View v) {

StringBuffer sbSystemInfo = new StringBuffer();

Configuration cfg = getResources().getConfiguration();

sbSystemInfo.append("手机系统键盘是否可用: " + cfg.keyboardHidden + "\n")

.append("系统键盘类型: " + cfg.keyboard + "\n")

.append("用户当前Local: " + cfg.locale + "\n")

.append("手机信号国家码: " + cfg.mcc + "\n")

.append("手机信号网络码: " + cfg.mnc + "\n")

.append("手机触摸屏方式: " + cfg.touchscreen + "\n")

.append("手机屏幕方向: " + cfg.orientation + "\n")

.append("手机是否开启导航: " + cfg.navigation + "\n");

Log.i(TAG, sbSystemInfo.toString());

tvInfor.setText(sbSystemInfo);

/* 手机横竖屏切换 */

if(cfg.orientation == Configuration.ORIENTATION_PORTRAIT){//如果当前是竖屏,就切换成横屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

}else{

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//否则切换成横屏

}

}

}

因为横竖屏幕切换及屏幕尺寸改变,默认情况下会影响Activity的生命周期

所以为了使屏幕切换&屏幕大小改变不影响Activity的生命周期,需要在AndroidManifest.xml清单文件中配置一下activity的android:configChanges属性

android:name="com.yihui.commonapi.MainActivity"

android:configChanges="orientation|screenSize"

android:label="@string/app_name" >

运行效果:

7e1d8e76327498af986b19f778d5e2df.png

http://blog.csdn.net/yihuiworld

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值