806

1.RelativeLayout有一点需要注意,因为它内部是通过多个View之间的关系而确定的框架,那么当其中某一个View因为某些需要调用GONE 来完全隐藏掉后,会影响与其相关联的Views。Android为我们提供了一个属性 alignWithParentIfMissing 用于解决类似问题,当某一个View无法找到与其相关联 的Views后将依据alignWithParentIfMissing 的设定判断是否与父级View对齐。

        String srvcName = Context.TELEPHONY_SERVICE;
        TelephonyManager telephonyManager = (TelephonyManager)getSystemService(srvcName);
              
        String phoneType = "Phone Type: " + telephonyManager.getPhoneType();
        
        String deviceID = "Device ID: " + telephonyManager.getDeviceId();
        
        String phoneNumber = "Phone Number: " + telephonyManager.getLine1Number();
        
        String networkContry = "Network Country: " + telephonyManager.getNetworkCountryIso();
        
        String networkName = "Network Name: " + telephonyManager.getNetworkOperatorName();
        
        String networkType = "Network type: " + telephonyManager.getNetworkType();
        
        String simCountry = "SIM Country: " + telephonyManager.getSimCountryIso();
        
        String simName = "SIM Name: " + telephonyManager.getSimOperatorName();
        
        String simNumber = "SIM Number: " + telephonyManager.getSimSerialNumber();
 
所有的设备都可以返回一个 TelephonyManager.getDeviceId()所有的GSM设备 (测试设备都装载有SIM卡) 可以返回一个TelephonyManager.getSimSerialNumber()所有的CDMA 设备对于 getSimSerialNumber() 却返回一个空值!所有添加有谷歌账户的设备可以返回一个 ANDROID_ID所有的CDMA设备对于 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在设置时添加了谷歌账户)
   tmDevice = "" + tm.getDeviceId();
   tmSerial = "" + tm.getSimSerialNumber();
   androidId = ""
     + android.provider.Settings.Secure.getString(context
       .getContentResolver(),
       android.provider.Settings.Secure.ANDROID_ID);

   UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice
     .hashCode() << 32)
     | tmSerial.hashCode());
   deviceId = deviceUuid.toString();

 

如果你想得到设备的唯一序号, TelephonyManager.getDeviceId() 就足够了。但很明显暴露了DeviceID会使一些用户不满,所以最好把这些id加密了。实际上加密后的序号仍然可以唯一的识别该设备,并且不会明显的暴露用户的特定设备,例如,使用 String.hashCode() ,结合UUID




从Android 2.3开始提供了一个新的类StrictMode,可以帮助开发者改进他们的Android应用,StrictMode可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者使其改进程序,使主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞,导致ANR窗口的发生。

下面简要说明下Android 2.3新特性StrictMode限制模式的工作方式,见下面的代码:

publicvoid onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
.penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
.penaltyLog() //打印logcat
.penaltyDeath()
.build());
}
super.onCreate();
}
上述代码可以在Application的OnCreate中添加,这样就能在程序启动的最初一刻进行监控了

Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。

异常处理类:

public class ErrorReporter implements Thread.UncaughtExceptionHandler {

	private static Context context;

	public static void installReporter(Context appContext) {

		try {
			Thread.setDefaultUncaughtExceptionHandler(new ErrorReporter());
			context = appContext;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex) {

		showToast("Sorry. Something went wrong and it's reported. We will fix it soon!");
		ex.printStackTrace();
		android.os.Process.killProcess(android.os.Process.myPid());
		System.exit(10);
	}

	private void showToast(final String message) {
		new Thread() {
			@Override
			public void run() {
				Looper.prepare();
				Toast.makeText(context, message, Toast.LENGTH_LONG).show();
				Looper.loop();
			}
		}.start();
	}
}


绑定异常处理类

ErrorReporter.installReporter(getApplicationContext());
"sdk".equals(Build.PRODUCT) //判断实在虚拟机中运行
isTaskRoot()//判断是不是task中最底层的activity
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: w806 Micropython 是一个嵌入式的 Python 开发平台,它基于 Micropython 固件以及 ESP8266 芯片设计。该平台适用于物联网设备的开发,可提供更快的开发速度和更低的功耗。 w806 Micropython 提供了丰富的 API 和库,使得开发者可以轻松地编写和调试代码。开发者可以使用 Python 语言进行开发,这使得开发过程更加简单和快速。平台还提供了一个交互式的 REPL(Read-Eval-Print Loop)环境,方便开发者实时调试代码。 除了支持常见的 Python 函数和语法外,w806 Micropython 还提供了丰富的硬件接口和驱动程序。开发者可以通过这些接口和驱动程序轻松访问传感器、执行器以及其他外部设备。平台还支持 Wi-Fi 和蓝牙无线通信,开发者可以轻松将设备连接到云平台或其他设备。 w806 Micropython 还具有低功耗的特性,这对于物联网设备来说至关重要。它能够在低电压或电池供电的情况下正常运行,从而延长设备的使用寿命。平台还支持休眠模式,可以在设备闲置时自动进入休眠状态,从而进一步降低功耗。 总之,w806 Micropython 是一个功能丰富且易于使用的物联网开发平台,它结合了 Micropython 固件和 ESP8266 芯片的优势。开发者可以快速编写和调试代码,并轻松访问硬件接口和驱动程序。此外,平台还具有低功耗的特性,适用于需要长时间运行且低功耗的物联网设备。 ### 回答2: w806 Micropython是一种针对W806开发板的Micropython固件。W806是一款基于Espressif ESP8266芯片的WiFi开发板,而Micropython是一种基于Python的嵌入式微控制器固件。 W806 Micropython使得开发者可以使用Python语言来编程W806开发板。Python是一种简洁易懂的高级编程语言,因此通过使用Micropython,开发者可以以更直观、简单的方式来开发W806的应用程序。 与其他编程语言相比,Python的语法简单易懂,不存在复杂的类型定义和变量声明。这使得使用Micropython编程W806开发板变得更加容易上手。 W806 Micropython还提供了丰富的库和模块,使得开发者可以方便地访问各种传感器和外设。通过这些库和模块,开发者可以轻松地实现各种功能,例如连接WiFi、读取温度传感器数据、控制LED等。 此外,W806 Micropython还支持网络编程,开发者可以通过简单的代码实现与服务器的通信,从而实现云端控制。 总之,W806 Micropython是一种适用于W806开发板的嵌入式微控制器固件,它使用Python语言编程,使得开发者可以以简单、直观的方式来开发W806的各种应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值