Android常用API
来源:互联网 发布:手工皮鞋店铺推荐知乎 编辑:程序博客网 时间:2024/06/05 16:21
--------------------------
Android三种方式设置和获取属性:
1. Native层使用property_get和property_set,头文件cutils/properties.h和libcutil库。
2. Java层使用System.getProperty和System.setProperty方法。该系统属性与native层系统属性存储空间不同。
3. Java层android.os.SystemProperties可以操作Android系统属性,该类通过JNI调用Native的property_get和property_set方法来获得和设置属性。
4. Shell脚本可以使用setprop和getprop命令来设置和获取属性。
/* property_get: returns the length of the value which will never be** greater than PROPERTY_VALUE_MAX - 1 and will always be zero terminated.** (the length does not include the terminating zero).**** If the property read fails or returns an empty value, the default** value is used (if nonnull).*/int property_get(const char *key, char *value, const char *default_value);/* property_set: returns 0 on success, < 0 on failure */int property_set(const char *key, const char *value);--------------------------
Android组件和线程是不同的概念,体现MVC
-------------------------
frameworks/base/core/java/android/os/UEventObserver.java用来监听UEVENT。 例如
device/xxx/frameworks/services/java/com/xxx/server/xxxHDMIRxService.java初始化时mHDMIRxObserver.startObserving(HdmiRxUeventKeyword),然后
private UEventObserver mHDMIRxObserver = new UEventObserver() {@Overridepublic void onUEvent(UEventObserver.UEvent event) { Slog.w(TAG, "mHDMIRxObserver:onUEvent"); setHdmiRxPlugged("1".equals(event.get("SWITCH_STATE")));}};
device/xxx/frameworks/core/java/com/xxx/hardware/xxxHDMIManager.java中获取service
mRtkHDMIService = IRtkHDMIService.Stub.asInterface(ServiceManager.getService("RtkHDMIService"));
通过AIDL IxxxHDMIRxService.aidl调用service功能。
driver/media/platform/xxx_hdmirx/v4l2_hdmi_dev.c/update_hdmirx_switch_state()
driver/switch/switch_class.c/switch_set_state()/kobject_uevent_env()
------------------------------------
------------------------------------
Android启动hotspot的java代码可以配置的内容很少,如果需要高级配置功能需要到底层去控制。
使用netd启动hostapd的文件:android/system/netd/server/SoftapController.cpp,相关类:
WifiManagerWifiConfiguration...位置:
android/frameworks/base/wifi/java/android/net/wifi/*
android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/*
-----------------------------
-----------------------------
JNI Sample
1. CPP
#include <JNIHelp.h>#define CLASS_NAME_UTILS "com/example/Utils"#define CREATE_CRASH 0static JavaVM *g_VM;static jstring native_getWifiMac(JNIEnv * env, jobject obj, jstring ifname){const char *ifn = env->GetStringUTFChars(ifname, 0);char cap[128];ALOGE("jni, Call native_getWifiMac!\n");strcpy(cap, ifn);env->ReleaseStringUTFChars(ifname, ifn);FILE *fp = fopen("/sys/class/net/wlan0/address", "r");if(fp) {ALOGE("HDMIRxDemo: jni %d\n", __LINE__);fscanf(fp, "%s", cap);fclose(fp);} else {ALOGE("HDMIRxDemo: jni %d\n", __LINE__);}return env->NewStringUTF(cap);}static void native_prepare(JNIEnv * /*env*/ , jobject /*obj*/){ ALOGV("call [%s]",__FUNCTION__);}static void native_init(JNIEnv * /*env*/ , jobject /*obj*/){ ALOGV("call [%s]",__FUNCTION__);}static void abc(JNIEnv * /*env*/, jobject /*obj*/, jint bc, jlong startTime, jlong endTime)
{ALOGV("call [%s]",__FUNCTION__);}static JNINativeMethod gUtilsMethods[] = { {"init","()V",(void*)native_init}, {"prepare","()V",(void*)native_prepare},{"abc","(IJJ)V",(void*)abc},{"getWifiMac","(Ljava/lang/String;)Ljava/lang/String;",(void*)native_getWifiMac},};static int register_jni(JNIEnv *env){ ALOGE("jni, Call register_jni!\n"); return jniRegisterNativeMethods(env,CLASS_NAME_UTILS,gUtilsMethods,NELEM(gUtilsMethods));}extern "C" JNIEXPORT void JNI_OnUnload(JavaVM* /*vm*/, void* /*reserved*/){ ALOGE("Call JNI_OnUnload!\n");}extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/){ JNIEnv* env = NULL; jint result = -1; g_VM=vm; ALOGE("jni, Call JNI_Onload!\n"); if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { ALOGE("GetEnv failed!\n"); return result; } if(register_jni(env)<0) return -1; return JNI_VERSION_1_4;}2. Java
package com.example;public class Utils { private static Utils sInstance = null; static { System.loadLibrary("utils"); } public native void init(); public native void prepare(); public native String getWifiMac(String ifname); public static Utils getInstance(){ if(sInstance == null){ sInstance = new Utils(); } return sInstance; }}// Usagetry { Log.d(TAG, "getWifiMac"); return Utils.getInstance().getWifiMac(ifname);}catch(Exception e) { e.printStackTrace(); }写文件
String path = null;File file = null;OutputStream os = null;OutputStreamWriter osw = null;BufferedWriter bw = null;StringBuffer sb = null;try { sb = new StringBuffer(); sb.append("abc\n"); path = context.getFilesDir() + "/abc.conf"; file = new File(path); if(!file.exists()) file.createNewFile(); Runtime.getRuntime().exec("chmod 777 " + path); os = new FileOutputStream(file, false); osw = new OutputStreamWriter(os); bw = new BufferedWriter(osw); bw.write(sb.toString()); bw.flush();} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();} finally { try { bw.close(); } catch (IOException e) { e.printStackTrace(); }}
获取网卡MAC,android6之后只能获取eth0和lo,获取WiFi网卡地址失败:
/* Method */try { Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); NetworkInterface network = null; StringBuilder buf = new StringBuilder(); byte[] address = null; byte b; while (e.hasMoreElements()) { network = e.nextElement(); if (network != null) { if (!network.getName().equals(ifname)) { continue; } address = network.getHardwareAddress(); if (address == null || address.length <= 0) { return null; } buf.append(String.format("%02x:", address[0])); buf.append(String.format("%02x:", address[1])); buf.append(String.format("%02x:", address[2])); buf.append(String.format("%02x:", address[3])); buf.append(String.format("%02x:", address[4])); buf.append(String.format("%02x", address[5])); return buf.toString(); } else { System.out.println("error"); } } }catch(Exception e) { e.printStackTrace(); }/* Methord */try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface nif : all) { Log.d(TAG, "Name=" + nif.getName()); if (!nif.getName().equalsIgnoreCase("wlan0")) continue; byte[] macBytes = nif.getHardwareAddress(); Log.d(TAG, "macBytes=" + macBytes); if (macBytes == null) return ""; StringBuilder res1 = new StringBuilder(); for (byte b : macBytes) { res1.append(Integer.toHexString(b & 0xFF) + ":"); } Log.d(TAG, "res1=" + res1.toString()); if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } Log.d(TAG, "res1=" + res1.toString()); } return "abc";}catch(Exception e) { e.printStackTrace(); }/* Methord */String path = null;File file = null;FileInputStream fis = null;InputStreamReader isr = null;BufferedReader br = null;String mac = null;try { path = "/sys/class/net/wlan0/address"; file = new File(path); if(!file.exists()) Log.d(TAG, "File " + path + " not exists"); fis = new FileInputStream(path); isr = new InputStreamReader(fis, "UTF-8"); br = new BufferedReader(isr); mac = br.readLine(); Log.d(TAG, "Read wlan0 addr [" + mac + "]"); return mac; } catch (Exception e) { e.printStackTrace(); }/* Methord */try {
String mac = "";
Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address");
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
mac = input.readLine();
Log.d(TAG, "Read MWTV3 wlan0 addr [" + mac + "]");
} catch (Exception e) {
e.printStackTrace();
}/* Methord */char[] mac = new char[128];try { FileReader reader = new FileReader("/sys/class/net/wlan0/address"); int readLength = reader.read(mac); Log.d(TAG, "Read wlan0 addr [" + mac.toString() + "]"); reader.close();} catch (Exception e) { e.printStackTrace(); }return mac.toString();/* Methord */try {
String mac = "";
Process p = Runtime.getRuntime().exec("ifconfig wlan0");
InputStreamReader isr = new InputStreamReader(p.getInputStream());
LineNumberReader lnr = new LineNumberReader(isr);
String str = lnr.readLine();
Log.d(TAG, "MWTV3 ifconfig wlan0 [" + str + "]");
int i = str.indexOf("HWaddr");
p.getInputStream().close();
isr.close();
lnr.close();
mac = str.substring(i + 6);
mac = mac.trim().toLowerCase();
Log.d(TAG, "MWTV3 wlan0 addr [" + mac + "]");
} catch (Exception e) {
e.printStackTrace();
}
- Android android 常用API
- 常用的 Android API
- Android 常用API
- Android 常用API总结
- android 常用技巧api
- Android常用API
- Android Studio常用API
- Android Api 常用类库包介绍
- Android Api 常用类库包介绍
- android 常用api示例
- android Fragment 常用api方法
- android 逆向分析常用API
- Android WebView 常用API参考手册
- android常用的API接口调用
- android有关bluetooth常用api简介
- Android API中常用的包
- android常用的API接口调用
- android有关bluetooth常用api简介
- 子数组之和
- codevs 1519 过路费(最小生成树Kruskal算法+lca)
- Convert BST to Greater Tree
- nginx负载均衡介绍与配置
- oracle常用命令--插入/添加表数据之insert命令--插入日期
- Android常用API
- 多表联查,两表之间相互关联,不一定需要有主外键关系,字段匹配就行
- Cause: com.android.dex.DexException: Multiple dex files define Lcom
- CI内的加密解密用法
- [leetcode: Python]501. Find Mode in Binary Search Tree
- Android Animation动画
- 使用hibernate某个属性值保存不进去,update=false
- AOJ.832 路边骗局
- Ubuntu14.04在线安装配置Nginx