2019-03-26 17:06:56 weixin_44187730 阅读数 2935
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32505 人正在学习 去看看 高煥堂

一、安装

#下载依赖
npm install --save react-native-device-info

#链接原生库
react-native link react-native-device-info

二、权限配置

  • 编辑/android/app/src/main/AndroidManifest.xml文件加入权限信息
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

三、代码示例及效果

  • 代码示例
import React, {Component} from 'react';
import {StyleSheet, Text, View} from 'react-native';
import DeviceInfo from 'react-native-device-info';

export default class App extends Component<Props> {

    constructor(props) {
        super(props);
    }

    //初始加载、获取物理硬件信息
    async componentWillMount() {
        await console.log('api版本:', DeviceInfo.getAPILevel());
        await console.log('品牌:', DeviceInfo.getBrand());
        await console.log('当前应用名称:', DeviceInfo.getApplicationName());
        await console.log('应用编译版本号:', DeviceInfo.getBuildNumber());
        await console.log('获取应用程序包标识符:', DeviceInfo.getBundleId());
        await console.log('运营商名称:', DeviceInfo.getCarrier());
        await console.log('设备所处国家:', DeviceInfo.getDeviceCountry());
        await console.log('设备ID:', DeviceInfo.getDeviceId());
        await console.log('设备地区:', DeviceInfo.getDeviceLocale());
        await console.log('设备名称:', DeviceInfo.getDeviceName());
        await console.log('获取应用初始安装时间:', DeviceInfo.getFirstInstallTime());
        await console.log('设备字体大小:', DeviceInfo.getFontScale());
        await console.log('剩余存储容量(字节):', DeviceInfo.getFreeDiskStorage());
        await DeviceInfo.getIPAddress().then(res => {
            console.log('设备当前网络地址IP:', res);
        });
        await console.log('应用程序实例ID:', DeviceInfo.getInstanceID());
        await console.log('获取应用上次更新时间:', DeviceInfo.getLastUpdateTime());
        await DeviceInfo.getMACAddress().then(res => {
            console.log('网络适配器MAC地址:', res);
        });
        await console.log('设备制造商:', DeviceInfo.getManufacturer());
        await console.log('获取JVM试图使用的最大内存量(字节):', DeviceInfo.getMaxMemory());
        await console.log('获取设备模式:', DeviceInfo.getModel());
        await console.log('获取电话号码:', DeviceInfo.getPhoneNumber());
        await console.log('获取应用程序可读版本:', DeviceInfo.getReadableVersion());
        await console.log('设备唯一序列号:', DeviceInfo.getSerialNumber());
        await console.log('获取系统名称:', DeviceInfo.getSystemName());
        await console.log('获取系统版本:', DeviceInfo.getSystemVersion());
        await console.log('系统时区:', DeviceInfo.getTimezone());
        await console.log('完整磁盘空间大小(字节):', DeviceInfo.getTotalDiskCapacity());
        await console.log('设备总内存(字节):', DeviceInfo.getTotalMemory());
        await console.log('设备唯一ID:', DeviceInfo.getUniqueID());
        await console.log('设备用户代理:', DeviceInfo.getUserAgent());
        await console.log('设备版本:', DeviceInfo.getVersion());
        await console.log('用户偏好是否设置为24小时格式:', DeviceInfo.is24Hour());
        await console.log('程序是否允许在模拟器中:', DeviceInfo.isEmulator());
        await console.log('是否是平板电脑:', DeviceInfo.isTablet());
    }

    render() {
        return (
            <View style={styles.container}>
                <Text>
                    测试获取设备信息.....
                </Text>
            </View>
        );
    }
};

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    }
});

  • 效果图
    在这里插入图片描述
2019-06-27 09:58:26 ReturnNull0 阅读数 446
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32505 人正在学习 去看看 高煥堂

React-native-device-info 是一个在React Native中获取移动设备信息的第三方库

安装 :  yarn add react-native-device-info
链接原生代码库:  react-native link react-native-device-info


引入组件
import DeviceInfo from 'react-native-device-info';

//获取API版本
const apiLevel = DeviceInfo.getAPILevel();

//获取App应用名称
const appName = DeviceInfo.getApplicationName();

//获取设备品牌类型
const brand = DeviceInfo.getBrand();

//获取应用包名
const bundleId = DeviceInfo.getBundleId();

//获取设备mac地址,需要配置权限,如Android需要在原生项目中中配置
// <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
DeviceInfo.getMACAddress().then(mac => {
    consle.log(mac);
});

//获取设备ip地址,需配置权限,同上
DeviceInfo.getIPAddress().then(ip => {
    alert(ip);
});

//获取设备唯一的ID
const uniqueID = DeviceInfo.getUniqueID();

//获取应用版本号,Android中对应versionName
const versionName = DeviceInfo.getVersion();

// 获取应用编译版本号,Android中对应versionCode
const versionCode = getBuildNumber();

该组件的其他方法详细说明和示例可以进入官方GitHub地址查看,https://github.com/rebeccahughes/react-native-device-info

 

2016-08-30 12:14:44 qizhenshuai 阅读数 2379
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32505 人正在学习 去看看 高煥堂

React Native获取移动设备信息(react-native-device-info)如何使用?

  • 组件说明
  • 组件使用介绍
  • ios如何使用
  • android如何使用

组件说明

  • 该组件是一个第三方的获取移动设备信息的一个组件,适用于ios和android双平台

组件使用介绍

在ReactNative中使用第三方组件,都必须要下载依赖包
我们一般都是使用命令行来执行下载:
进入项目执行:npm install –save react-native-device-info

ios 使用react-native-device-info

  • 1.首先要在xcode中进行初始化
    打开xcode,找到自己的项目,展开后右击Libraries文件夹。
    选择Add Files to “projectName”…
    找到当前项目目录–>node_modules/react-native-device-info文件夹,找到”RNDeviceInfo.xcodeproj”文件,然后点击Add
  • 2.在xcode中加载
    在Xcode中点击你的工程名字——>Build Phases——>Link Binary With Libraries——>点击 ‘+’号按钮,添加libRNDeviceInfo.a文件
  • 3.添加环境变量
    (SRCROOT)/../reactnative/Reactand(SRCROOT)/../../React 并且修改 recursive
  • 4.基本的用法
    ***import DeviceInfo from ‘react-native-device-info’
    console.log(“Device Unique ID”, DeviceInfo.getUniqueID()); // e.g. FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9
    // * note this is IDFV on iOS so it will change if all apps from the current apps vendor have been previously uninstalled
    console.log(“Device Manufacturer”, DeviceInfo.getManufacturer()); // e.g. Apple
    console.log(“Device Model”, DeviceInfo.getModel()); // e.g. iPhone 6
    console.log(“Device ID”, DeviceInfo.getDeviceId()); // e.g. iPhone7,2 / or the board on Android e.g. goldfish
    console.log(“Device Name”, DeviceInfo.getSystemName()); // e.g. iPhone OS
    console.log(“Device Version”, DeviceInfo.getSystemVersion()); // e.g. 9.0
    console.log(“Bundle Id”, DeviceInfo.getBundleId()); // e.g. com.learnium.mobile
    console.log(“Build Number”, DeviceInfo.getBuildNumber()); // e.g. 89
    console.log(“App Version”, DeviceInfo.getVersion()); // e.g. 1.1.0
    console.log(“App Version (Readable)”, DeviceInfo.getReadableVersion()); // e.g. 1.1.0.89
    console.log(“Device Name”, DeviceInfo.getDeviceName()); // e.g. Becca’s iPhone 6
    console.log(“User Agent”, DeviceInfo.getUserAgent()); // e.g. Dalvik/2.1.0 (Linux; U; Android 5.1; Google Nexus 4 - 5.1.0 - API 22 - 768x1280 Build/LMY47D)
    console.log(“Device Locale”, DeviceInfo.getDeviceLocale()); // e.g en-US
    console.log(“Device Country”, DeviceInfo.getDeviceCountry()); // e.g US

android 使用react-native-device-info

  • 1.首先需要修改下Gradle文件
    在你的根目录下运行:react-native link react-native-device-info
  • 2.在MainActivity.java文件中进行注册模块(react-native的版本需要>0.18)

    *
    import com.learnium.RNDeviceInfo.RNDeviceInfo; // <— import


public class MainActivity extends ReactActivity {
……
/**
* A list of packages used by the app. If the app uses additional views
* or modules besides the default ones, add more packages here.
*/
@Override
protected List getPackages() {
return Arrays.asList(
new RNDeviceInfo(), // <—— add here
new MainReactPackage());
}
}
  • 3.如果你需要在安卓上获取设备的名字,需要修改AndroidManifest.xml配置文件,来获取权限。

在android设备中获取以下权限:
uses-permission android:name=”android.permission.BLUETOOTH”



  • 4.android中用法

***import DeviceInfo from ‘react-native-device-info’
console.log(“Device Unique ID”, DeviceInfo.getUniqueID()); // e.g. FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9
// * note this is IDFV on iOS so it will change if all apps from the current apps vendor have been previously uninstalled
console.log(“Device Manufacturer”, DeviceInfo.getManufacturer()); // e.g. Apple
console.log(“Device Model”, DeviceInfo.getModel()); // e.g. iPhone 6
console.log(“Device ID”, DeviceInfo.getDeviceId()); // e.g. iPhone7,2 / or the board on Android e.g. goldfish
console.log(“Device Name”, DeviceInfo.getSystemName()); // e.g. iPhone OS
console.log(“Device Version”, DeviceInfo.getSystemVersion()); // e.g. 9.0
console.log(“Bundle Id”, DeviceInfo.getBundleId()); // e.g. com.learnium.mobile
console.log(“Build Number”, DeviceInfo.getBuildNumber()); // e.g. 89
console.log(“App Version”, DeviceInfo.getVersion()); // e.g. 1.1.0
console.log(“App Version (Readable)”, DeviceInfo.getReadableVersion()); // e.g. 1.1.0.89
console.log(“Device Name”, DeviceInfo.getDeviceName()); // e.g. Becca’s iPhone 6
console.log(“User Agent”, DeviceInfo.getUserAgent()); // e.g. Dalvik/2.1.0 (Linux; U; Android 5.1; Google Nexus 4 - 5.1.0 - API 22 - 768x1280 Build/LMY47D)
console.log(“Device Locale”, DeviceInfo.getDeviceLocale()); // e.g en-US
console.log(“Device Country”, DeviceInfo.getDeviceCountry()); // e.g US


2018-03-21 16:56:41 u013233097 阅读数 7003
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32505 人正在学习 去看看 高煥堂

前言:顾名思义 React-native-device-info 本第三方就是为了 获取设备信息。

实际上react-native有很多类似第三方,并且使用方式和本例大体相同。作为示例记录下,供有需要的同学学习:

1,初始化项目:

初始化一个 react-Native项目:命令:

win+R // 进入命令行

cd desktop //进入桌面

react-Native  init deviceInfoDemo // 初始化  react-native 项目:

cd deviceInfoDemo //进入项目 根目录

yarn install // 或者 npm install 

项目初始化 完成。

2, 打开模拟器。

使用如下 emulator命令(前提已经配置好 环境变量):


emulator -list-avds // 该命令用于查看  当前计算机下存在的安卓模拟器 

emulator -avd vm_name //修改 vm_name 为你当前计算机 中模拟器名称  打开模拟器。

或者 打开 AndroidStudio 工具 ,打开sdk manager 打开模拟器。

启动模拟器后你可以运行 react-native run-android 命令。模拟器会出现我们初始化的项目界面:

这里写图片描述

3, 安装 和链接 device-Info:

进入项目 根目录 执行命令

安装 react-native-device-info
//Using npm:
npm install --save react-native-device-info

//or using yarn:
yarn add react-native-device-info

别忘了检查是否安装成功。

自动链接:

执行命令:

//shell
react-native link react-native-device-info


//(or using [`rnpm`](https://github.com/rnpm/rnpm) for versions of React Native < 0.27) 
rnpm link react-native-device-info
手动链接:


Android 手动链接

  • 打开 android/build.gradle:
...
  ext {
    // dependency versions
    googlePlayServicesVersion = "<Your Services Version>"
  }
...
  • 进入 android/app/build.gradle: 添加 device-info 依赖
dependencies {
    ...
    compile "com.facebook.react:react-native:+"  // From node_modules
+   compile project(':react-native-device-info')
}
  • 进入 android/settings.gradle: 指定 device-info 目录
...
include ':app'
+ include ':react-native-device-info'
+ project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android')

对于 React Native 0.29+ 还需:

  • 进入 MainApplication.java:
+ import com.learnium.RNDeviceInfo.RNDeviceInfo;

  public class MainApplication extends Application implements ReactApplication {
    //......

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
+         new RNDeviceInfo(),  //添加 此行
          new MainReactPackage()
      );
    }

    ......
  }

对于低版本 React Native:

  • 进入 MainActivity.java: 主界面
+ import com.learnium.RNDeviceInfo.RNDeviceInfo;

  public class MainActivity extends ReactActivity {
    ......

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
+       new RNDeviceInfo(),  //添加  moudle
        new MainReactPackage()
      );
    }
  }

其他 平台不在赘述。 读者可参考 文末官方地址链接。

贴上 device-info的 部分API方法:

API

方法 返回值类型 iOS Android Windows Since
getAPILevel() //获取应用程序api版本 number 0.12.0
getApplicationName() //获取 应用名称 string 0.14.0
getBrand() // 获取厂家 string 0.9.3
getBuildNumber() // 获取 应用编译版本号 string ?
getBundleId() //获取应用程序包标识符 string ?
getCarrier() // 获取运行商名称 string 0.13.0
getDeviceCountry() // 根据区域设置信息获取设备国家。 string 0.9.0
getDeviceId() // 获取设备 id string 0.5.0
getDeviceLocale() //获取设备的地区 string 0.7.0
getDeviceName() //获取设备名称 string ?
getFirstInstallTime() //获取应用程序第一次安装的时间,以毫秒为单位。 number 0.12.0
getFontScale() //获取设备字体大小。 number 0.15.0
getFreeDiskStorage()//获取可用存储大小,以字节为单位。 number 0.15.0
getIPAddress() //获取设备 当前网络地址 Promise<string> 0.12.0
getInstanceID() //获取应用程序实例ID。 string ?
getLastUpdateTime() //获取应用程序上次更新的时间,以毫秒为单位。 number 0.12.0
getMACAddress() //获取网络适配器MAC地址。 Promise<string> 0.12.0
getManufacturer() //获取设备制造商。 string ?
getMaxMemory() //返回JVM试图使用的最大内存量,以字节为单位。 number 0.14.0
getModel() // 获取设备模式 string ?
getPhoneNumber() //获取电话号码 string 0.12.0
getReadableVersion()//取应用程序可读的版本。 string ?
getSerialNumber() //获取序列号 string 0.12.0
getSystemName() //获取系统名称 string ?
getSystemVersion() //获取系统版本 string ?
getTimezone() // 获取时区 string ?
getTotalDiskCapacity()//获取完整磁盘存储大小,以字节为单位。 number 0.15.0
getTotalMemory() //获取设备总内存,以字节为单位。 number 0.14.0
getUniqueID() //获取设备唯一的ID string ?
getUserAgent() //获取设备用户代理 string 0.7.0
getVersion() // 获取 版本 string ?
is24Hour() //告诉用户偏好是否设置为24小时格式 boolean 0.13.0
isEmulator() //告诉应用程序是否运行在模拟器中 boolean ?
isPinOrFingerprintSet()//告知设备是否设置了PIN号码或指纹 (callback)boolean 0.10.1
isTablet() //告知设备是否是平板电脑 boolean ?

以下 为博主虚拟机 获取到的信息 硬件信息:

这里写图片描述

代码地址:GitHub:https://github.com/zqHero/deviceInfoDemo

官方地址请看:
https://www.npmjs.com/package/react-native-device-info

2018-01-16 17:01:08 z93701081 阅读数 408
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32505 人正在学习 去看看 高煥堂

一、组件说明:

该组件同时适配Android和IOS平台。

二、组件介绍

1.首先需要安装组件:npm install react-native-device-info --save

2.IOS初始化:打开Xcode——>右击Libraries——>选择文件到当前项目,进入到node_modules/react-native-device-info——>添加.xcodeproj文件

2.1.在Xcode中点击你的工程名字——>Build Phases——>Link Binary With Libraries——>点击 '+'号按钮,添加libRNDeviceInfo.a文件(如下图所示)

2.2.添加环境变量:$(SRCROOT)/../react-native/React and $(SRCROOT)/../../React 并且修改 recursive

2.3.好了,下面就是基本的用法了

import DeviceInfo from 'react-native-device-info'
console.log("Device Unique ID", DeviceInfo.getUniqueID());  // e.g. FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9
// * note this is IDFV on iOS so it will change if all apps from the current apps vendor have been previously uninstalled

console.log("Device Manufacturer", DeviceInfo.getManufacturer());  // e.g. Apple

console.log("Device Model", DeviceInfo.getModel());  // e.g. iPhone 6

console.log("Device ID", DeviceInfo.getDeviceId());  // e.g. iPhone7,2 / or the board on Android e.g. goldfish

console.log("Device Name", DeviceInfo.getSystemName());  // e.g. iPhone OS

console.log("Device Version", DeviceInfo.getSystemVersion());  // e.g. 9.0

console.log("Bundle Id", DeviceInfo.getBundleId());  // e.g. com.learnium.mobile

console.log("Build Number", DeviceInfo.getBuildNumber());  // e.g. 89

console.log("App Version", DeviceInfo.getVersion());  // e.g. 1.1.0

console.log("App Version (Readable)", DeviceInfo.getReadableVersion());  // e.g. 1.1.0.89

console.log("Device Name", DeviceInfo.getDeviceName());  // e.g. Becca's iPhone 6

console.log("User Agent", DeviceInfo.getUserAgent()); // e.g. Dalvik/2.1.0 (Linux; U; Android 5.1; Google Nexus 4 - 5.1.0 - API 22 - 768x1280 Build/LMY47D)

console.log("Device Locale", DeviceInfo.getDeviceLocale()); // e.g en-US

console.log("Device Country", DeviceInfo.getDeviceCountry()); // e.g US

3.Android的安装:

3.1首先需要修改下Gradle文件

在你的根目录下运行:react-native link react-native-device-info

3.2在MainActivity.java文件中进行注册模块(react-native的版本需要>0.18)

import com.learnium.RNDeviceInfo.RNDeviceInfo;  // <--- import

public class MainActivity extends ReactActivity {
  ......

  /**
   * A list of packages used by the app. If the app uses additional views
   * or modules besides the default ones, add more packages here.
   */
    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
        new RNDeviceInfo(), // <------ add here
        new MainReactPackage());
    }
}

3.3如果你需要在安卓上获取设备的名字,需要修改AndroidManifest.xml配置文件,来获取权限。

...
<uses-permission android:name="android.permission.BLUETOOTH"/>

3.4用法同IOS。


没有更多推荐了,返回首页