首页 文章 精选 留言 我的

精选列表

搜索[笔记工具],共10000篇文章
优秀的个人博客,低调大师

Windows Server 笔记(六):Active Directory域服务:FSMO角色

谈到域控制器,就不得不说说域控制器的FSMO角色了: 森林级别:架构主机;域命名主机 域级别:RID主机;PDC主机;基础结构主机 首先是架构主机: 他是控制活动目录中所有对象/属性的定义; 查看架构主机,必须先在运行里面运行Regsvr32 Schmmgmt.dll 修改架构主机必须要Schema Admin权限 域命名主机: 控制森林内域的添加和删除; 建议与GC配置在一起 修改域命名主机需要Enterprise Admin权限 RID主机: 管理RID(相对标识符)池 对象安全符(SID)=域安全标识符+相对标识符 这里要说的DC本身也有RID池,当用了超过80%后,DC会向RID主机申请一批连续的RID; PDC主机: 模拟windows NT PDC 默认的域控制器浏览器 默认的域内权威的时间源 统一管理域账号密码的更新、验证机及锁定 一般负荷较大,建议单独安放 基础结构主机: 负责对跨域对象引用进行更新 单域的情况下基础结构主机不需要工作 不能同时和GC配置在一起(单域除外) 下面我们看一下,怎么查看这些角色: 首先是命令提示符(powershell): 可以直接运行“netdom query fsmo”进行查看; 如果忘记使用netdom查看的命名,可以通过“netdom /?”来获取帮助 图形界面: 首先需要运行“Regsvr32 Schmmgmt.dll”进行注册; 2、选择“确定”; 3、在通过MMC查看,运行“MMC”; 4、选择“添加/删除管理单元”; 5、选择“Active Directory架构”,然后选择“添加”,然后“确定”; 6、刚开始如果你直接右击“Active Directory架构”,你会发现“操作主机”是灰色的,无法选择; 7、你要先选择“Active Directory架构”(左击Active Directory架构),然后在右击“Active Directory架构”,选择“操作主机”; 8、当前架构主机就是你现在的架构主机,如果要更改架构主机,可以选择下面的“更改”架构主机; 9、打开“Active Directory域和信任关系”,右击“Active Directory域和信任关系”,选择性“操作主机”; 10、域命名操作主机就是你现在的域命名操作主机,如果要更改,可以选择“更改” 11、打开“Active Directory用户和计算机”,右击“计算机”(即域控制器,不是上面Active Directory用户和计算机),选择“操作主机”; 12、在这里可以看到:RID主机、PDC主机和基础结构主机,同样通过“更改”选项更改操作主机; 本文转自 as900 51CTO博客,原文链接:http://blog.51cto.com/yupeizhi/1426253,如需转载请自行联系原作者

优秀的个人博客,低调大师

APPium自动化启动手机应用笔记

java启动方法 1、需要安装JAR 2、启动如下: public class InitDriver { public static AndroidDriver<AndroidElement> initDriver() throws Exception{ File app=new File("自己安装包.apk"); DesiredCapabilities caps=new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android"); caps.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium"); caps.setCapability(MobileCapabilityType.UDID, "127.0.0.1:62001"); caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 600); //caps.setCapability(MobileCapabilityType.FULL_RESET, true); caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "包名"); caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "签名"); caps.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, true); caps.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, true); caps.setCapability(AndroidMobileCapabilityType.NO_SIGN, true); AndroidDriver<AndroidElement> driver=new AndroidDriver<AndroidElement>( new URL("http://127.0.0.1:4723/wd/hub"), caps); return driver; } } 三、获取报名与签名命令: aapt d badging Desktop\xxxxx.apk |findstr "package launchable-activity" 如: aapt d badging Desktop\Toon-beijing-test.apk |findstr "package launchable-activity" package: name='包名' versionCode='1709111541' versionName='1.8.0' platformBuildVersionName='7.1.1' launchable-activity: name='签名' label='' icon='' 四appium启动方式: appium -a 127.0.0.1 -p 4723–U4ca1558c--no-reset 五:DesiredCapabilities的参数配置和含义 1、本地安装apk包的文件路径设置,不需要安装就不用设置 File classpathRoot = new File(System.getProperty("user.dir")); File appDir = new File(classpathRoot, "apps"); File app = new File(appDir, "kingyee.apk"); 2、在当前session前不重置app状态 capabilities.setCapability("noReset", true); 3、测试的web浏览器,如果是测app则忽略 capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); 4、平台设置iOS,Android, or FirefoxOS capabilities.setCapability("platformName", "Android"); 5、设备序列号设置 capabilities.setCapability("deviceName", "Baytrail515B4E05"); 6、系统版本号设置 capabilities.setCapability("platformVersion", "4.4.4"); 7、避免重新签名 capabilities.setCapability("noSign","true"); 8、支持中文输入 capabilities.setCapability("unicodeKeyboard","True"); 9、重置输入法到原有状态 capabilities.setCapability("resetKeyboard","True"); 10、设置apk的包名 capabilities.setCapability("appPackage", "com.kingyee.m"); 11、设置启动Activity capabilities.setCapability("appActivity", "com.kingyee.m.Start"); 本文转自 知止内明 51CTO博客,原文链接:http://blog.51cto.com/357712148/1968237,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android开发学习笔记:Android很有用的代码片段

1:查看是否有存储卡插入 Stringstatus=Environment.getExternalStorageState(); if(status.equals(Enviroment.MEDIA_MOUNTED)){ 说明有SD卡插入 } 2:让某个Activity透明 OnCreate中不设Layout this.setTheme(R.style.Theme_Transparent); 以下是Theme_Transparent的定义(注意transparent_bg是一副透明的图片) 3:在屏幕元素中设置句柄 使用Activity.findViewById来取得屏幕上的元素的句柄.使用该句柄您可以设置或获取任何该对象外露的值. TextViewmsgTextView=(TextView)findViewById(R.id.msg); msgTextView.setText(R.string.push_me); 4:发送短信 Stringbody=”thisismmsdemo”; Intentmmsintent=newIntent(Intent.ACTION_SENDTO,Uri.fromParts(”smsto”,number,null)); mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY,body); mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE,true); mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT,true); startActivity(mmsintent); 5:发送彩信 StringBuildersb=newStringBuilder(); sb.append(”file://”); sb.append(fd.getAbsoluteFile()); Intentintent=newIntent(Intent.ACTION_SENDTO,Uri.fromParts(”mmsto”,number,null)); //Belowextradatasarealloptional. intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT,subject); intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY,body); intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI,sb.toString()); intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE,composeMode); intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT,exitOnSent); startActivity(intent); 7:发送Mail mime=“img/jpg”; shareIntent.setDataAndType(Uri.fromFile(fd),mime); shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(fd)); shareIntent.putExtra(Intent.EXTRA_SUBJECT,subject); shareIntent.putExtra(Intent.EXTRA_TEXT,body); 8:注册一个BroadcastReceiver registerReceiver(mMasterResetReciever,newIntentFilter(”oms.action.MASTERRESET”)); privateBroadcastReceivermMasterResetReciever=newBroadcastReceiver(){ publicvoidonReceive(Contextcontext,Intentintent){ Stringaction=intent.getAction(); if(”oms.action.MASTERRESET”.equals(action)){ RecoverDefaultConfig(); } } }; 9:定义ContentObserver,监听某个数据表 privateContentObservermDownloadsObserver=newDownloadsChangeObserver(Downloads.CONTENT_URI); privateclassDownloadsChangeObserverextendsContentObserver{ publicDownloadsChangeObserver(Uriuri){ super(newHandler()); } @Override publicvoidonChange(booleanselfChange){} } 10:获得手机UA publicStringgetUserAgent(){ Stringuser_agent=ProductProperties.get(ProductProperties.USER_AGENT_KEY,null); returnuser_agent; } 11:清空手机上Cookie CookieSyncManager.createInstance(getApplicationContext()); CookieManager.getInstance().removeAllCookie(); 12:建立GPRS连接 //DialtheGPRSlink. privatebooleanopenDataConnection(){ //Setupdataconnection. DataConnectionconn=DataConnection.getInstance(); if(connectMode==0){ ret=conn.openConnection(mContext,“cmwap”,“cmwap”,“cmwap”); }else{ ret=conn.openConnection(mContext,“cmnet”,“”,“”); } } 13:PreferenceActivity用法 publicclassSettingextendsPreferenceActivity{ publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); } } Setting.xml: android:key=”seting2″ android:title=”@string/seting2″ android:summary=”@string/seting2″/> android:key=”seting1″ android:title=”@string/seting1″ android:summaryOff=”@string/seting1summaryOff” android:summaryOn=”@stringseting1summaryOff”/> 14:通过HttpClient从指定server获取数据 DefaultHttpClienthttpClient=newDefaultHttpClient(); HttpGetmethod=newHttpGet(“http://www.baidu.com/1.html”); HttpResponseresp; Readerreader=null; try{ //AllClientPNames.TIMEOUT HttpParamsparams=newBasicHttpParams(); params.setIntParameter(AllClientPNames.CONNECTION_TIMEOUT,10000); httpClient.setParams(params); resp=httpClient.execute(method); intstatus=resp.getStatusLine().getStatusCode(); if(status!=HttpStatus.SC_OK)returnfalse; //HttpStatus.SC_OK; returntrue; }catch(ClientProtocolExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ if(reader!=null)try{ reader.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } 15:显示toast Toast.makeText(this._getApplicationContext(),R.string._item,Toast.LENGTH_SHORT).show(); 16:在当前Activity中启动另外一个Activity startActivity(newIntent(this,目标Activity.class)); 17:从当前ContentView从查找控件 (Button)findViewById(R.id.btnAbout) R.id.btnAbout指控件id。 18:获取屏幕宽高 DisplayMetricsdm=newDisplayMetrics(); //获取窗口属性 getWindowManager().getDefaultDisplay().getMetrics(dm); intscreenWidth=dm.widthPixels;//320 intscreenHeight=dm.heightPixels;//480 19:无标题栏、全屏 //无标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏模式 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 注意在setContentView()之前调用,否则无效。 20注册activity 所有用到的Activity都必须在AndroidManifest.xml中注册,否则会报空指针错误。 如:,注意是包名+类名。 会持续更新...................... 本文转自 lingdududu 51CTO博客,原文链接http://blog.51cto.com/liangruijun/722171

优秀的个人博客,低调大师

Android开发学习笔记:浅谈3大类菜单

在Android系统中,菜单可以分为三类:选项菜单(Option Menu),上下文菜单(Context Menu)以及子菜单(Sub Menu)。 一.选项菜单(Option Menu) 创建选项菜单的步骤: 1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用 2.调用Menu的add( )方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon( )方法来为菜单项设置图标 3.当菜单项(MenuItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件 选项菜单的实例: packagecom.android.menu.activity; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Menu; importandroid.view.MenuItem; publicclassOptionMenuActivityextendsActivity{ //声明菜单项常量 privatestaticfinalintITEM_1=Menu.FIRST; privatestaticfinalintITEM_2=Menu.FIRST+1; privatestaticfinalintITEM_3=Menu.FIRST+2; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } //覆盖onCreateOptionsMenu(Menumenu)来添加菜单项 publicbooleanonCreateOptionsMenu(Menumenu){ //android.R使用的是系统自带的图标 menu.add(0,ITEM_1,0,"开始").setIcon(android.R.drawable.ic_media_play); menu.add(0,ITEM_2,0,"帮助").setIcon(android.R.drawable.ic_menu_help); menu.add(0,ITEM_3,0,"退出").setIcon(android.R.drawable.ic_menu_close_clear_cancel); returntrue; } //覆盖onOptionsItemSelected(MenuItemitem)来响应菜单选项被单击事件 publicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()){ caseITEM_1: setTitle("开始游戏!"); break; caseITEM_2: setTitle("查看帮助!"); break; caseITEM_3: setTitle("退出游戏!"); break; } returntrue; } } 效果图: 二.上下文菜单(Context Menu) 创建上下文菜单的步骤: 1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的add( )方法添加菜单项(MenuItem). 2.覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件 3.调用registerForContextMenu( )方法来为视图注册上下文菜单 上下文菜单的实例(按住“测试Context Menu”2秒,就会出现上下文菜单): packagecom.android.context.activity; importandroid.app.Activity; importandroid.graphics.Color; importandroid.os.Bundle; importandroid.view.ContextMenu; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.view.ContextMenu.ContextMenuInfo; importandroid.widget.TextView; publicclassContextMenuActivityextendsActivity{ privatestaticfinalintITME_1=Menu.FIRST; privatestaticfinalintITME_2=Menu.FIRST+1; privatestaticfinalintITME_3=Menu.FIRST+2; privateTextViewtext; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); text=(TextView)findViewById(R.id.TextView_1); //调用registerForContextMenu()来注册上下文菜单 registerForContextMenu(text); } @Override publicvoidonCreateContextMenu(ContextMenumenu,Viewv, ContextMenuInfomenuInfo){ menu.add(0,ITME_1,0,"红色背景"); menu.add(0,ITME_2,0,"蓝色背景"); menu.add(0,ITME_3,0,"白色背景"); } @Override publicbooleanonContextItemSelected(MenuItemitem){ switch(item.getItemId()){ caseITME_1: //设置TextView的背景颜色 text.setBackgroundColor(Color.RED); break; caseITME_2: text.setBackgroundColor(Color.BLUE); break; caseITME_3: text.setBackgroundColor(Color.WHITE); break; } returntrue; } } 效果图: 三.子菜单(Sub Menu) 创建子菜单的步骤: 1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的addSubMenu( )方法来添加子菜单(Sub Menu) 2.调用SubMenu的add( )方法来添加子菜单(Sub Menu) 3.覆盖onContextItemSelect( )方法来响应菜单单击事件 子菜单的实例: packagecom.android.sub.activity; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.SubMenu; publicclassSubMenuActivityextendsActivity{ privatestaticfinalintITEM_1=Menu.FIRST; privatestaticfinalintITEM_2=Menu.FIRST+1; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } //覆盖onCreateOptionsMenu(Menumenu)方法,添加子菜单项 publicbooleanonCreateOptionsMenu(Menumenu){ SubMenuad=menu.addSubMenu("添加").setIcon(android.R.drawable.ic_menu_add); SubMenure=menu.addSubMenu("关闭").setIcon(android.R.drawable.ic_menu_close_clear_cancel); ad.add(0,ITEM_1,0,"文件"); ad.add(0,ITEM_2,0,"图片"); returntrue; } //覆盖onOptionsItemSelected(MenuItemitem),响应菜单选项被单击事件 publicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()){ caseITEM_1: setTitle("添加文件!"); break; caseITEM_2: setTitle("添加图片!"); break; } returntrue; } } 效果图: 注:menu.add的方法中的参数: 1.int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。可以用到的方法有: removeGroup(id) setGroupCheckable(id, checkable, exclusive) setGroupEnabled(id,boolean enabled) setGroupVisible(id,visible)2.int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个Menu中的选项。在后面使用菜单的时候,就是靠这个item ID来判断,你选中的是哪个选项。3.int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的顺序来显示。4.String类型的title参数,表示选项中显示的文字。 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/641275

优秀的个人博客,低调大师

Android开发学习笔记:Button事件实现方法的总结

下面介绍Button事件实现的两种方法 main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/myButton1" android:text="按钮1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/myButton2" android:text="按钮2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> strings.xml <?xmlversion="1.0"encoding="utf-8"?> <resources> <stringname="hello">HelloWorld,ButtonDemoActivity!</string> <stringname="app_name">ButtonDemo</string> </resources> 第一种: ButtonDemoActivity.java packagecom.android.ButtonDemo.activity; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.Toast; publicclassButtonDemoActivityextendsActivity{ ButtonmyButton1,myButton2; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton1=(Button)findViewById(R.id.myButton1); myButton2=(Button)findViewById(R.id.myButton2); //使用匿名类注册Button事件 myButton1.setOnClickListener(newOnClickListener() { publicvoidonClick(Viewv) { Toast.makeText(ButtonDemoActivity.this,"你点击了按钮1",Toast.LENGTH_LONG).show(); } }); myButton2.setOnClickListener(newOnClickListener() { publicvoidonClick(Viewv) { Toast.makeText(ButtonDemoActivity.this,"你点击了按钮2",Toast.LENGTH_LONG).show(); } }); } } 第二种: ButtonDemoActivity.java packagecom.android.ButtonDemo.activity; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.Toast; publicclassButtonDemoActivityextendsActivity{ ButtonmyButton1,myButton2; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton1=(Button)findViewById(R.id.myButton1); myButton2=(Button)findViewById(R.id.myButton2); myButton1.setOnClickListener(newButtonClick()); myButton2.setOnClickListener(newButtonClick()); } //创建一个类,来响应OnClickListener classButtonClickimplementsOnClickListener { publicvoidonClick(Viewv) { switch(v.getId()){ caseR.id.myButton1: Toast.makeText(ButtonDemoActivity.this,"你点击了按钮1",Toast.LENGTH_LONG).show(); break; caseR.id.myButton2: Toast.makeText(ButtonDemoActivity.this,"你点击了按钮2",Toast.LENGTH_LONG).show(); break; default: break; } } } } 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/629329

优秀的个人博客,低调大师

[Android学习笔记七] 设备管理服务示例开发

本文通过示例演示Android Device Policy管理的实现。 1.示例基本操作图 上图是本示例的主界面,通过应用程序来实现设备管理,本示例实现密码设置管理。 1.1 通过点击“启动设备管理器”按钮来激活设备管理 应用程序用通知设备管理启用,用户点击激活,应用程序具备设备管理能力。 1.2 通过点击“设置密码规则”按钮来设置锁屏密码的限制规则,要使用该策略需要在设备管理的使用策略列表中添加limit-password. 示例中调用了设置新密码的ACTION(DevicePolicyManager.ACTION_SET_NEW_PASSWORD),通过设置后,看以看到屏幕锁屏需要密码。 1.3 通过点击“修改密码”按钮则可以将文本框中的内容作为锁屏密码,该步骤可以通过程序完成。 调用DevicePolicyManager的重置密码方法(resetPassword),即可在应用程序中对锁屏密码进行重置。 2. 具体实现 实现上述整个示例需要: a.界面布局;实际应用中根据具体情况而定 b.DevicePolicyManager类的具体使用 c.DeviceAdminReceiver类的子类话,来实现具体广播事件的处理 d.AndroidManifest.xml文件中广播接收类的配置 c.应用程序中需要的设备管理策略列表 注:本示例代码使用了Butterknife框架。 2.1 示例程序界面(layout/activity_device_admin.xml) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" android:background = "#f7f1f1" android:orientation = "vertical" android:padding = "15dp" > < LinearLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_gravity = "center_horizontal" android:orientation = "horizontal" > < EditText android:id = "@+id/pwd_editText" android:layout_width = "0dp" android:layout_height = "wrap_content" android:layout_margin = "10dp" android:layout_weight = "3" android:hint = "6位数字" android:textColor = "@android:color/black" /> < Button android:id = "@+id/modify_pwd_button" android:layout_width = "0dp" android:layout_height = "wrap_content" android:layout_margin = "10dp" android:layout_weight = "1.5" android:text = "修改密码" /> </ LinearLayout > < Button android:id = "@+id/pwd_rule_set_button" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:text = "设置密码规则" /> < Button android:id = "@+id/device_admin_button" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:text = "启用设备管理" /> </ LinearLayout > 2.2 Activity类和自定义的DeviceAdminReceiver类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 package secondriver.sdk.activity; import android.app.Activity; import android.app.admin.DeviceAdminReceiver; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import secondriver.sdk.R; /** *Author:secondriver *Created:2015/11/27 */ public class DeviceAdminActivity extends Activity{ @Bind (R.id.pwd_editText) public EditTextpwdEditText; private DevicePolicyManagermDevicePolicyManager; @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.activity_device_admin); ButterKnife.bind( this ); mDevicePolicyManager=(DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE); } //单击启用设备管理按钮 @OnClick (R.id.device_admin_button) public void onClickDeviceButton(Buttonbutton){ Intentintent= new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName( this ,MyDeviceAdminReceiver. class )); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "启动设备管理器" ); startActivityForResult(intent, 1 ); } //单击设置密码规则按钮 @OnClick (R.id.pwd_rule_set_button) public void onClickPwdRuleSetButton(Buttonbutton){ Intentintent= new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivityForResult(intent, 2 ); } //单击修改密码按钮 @OnClick (R.id.modify_pwd_button) public void onClickModifyPwdButton(Buttonbutton){ Stringpwd=pwdEditText.getText().toString(); ComponentNamereceiver= new ComponentName( this ,MyDeviceAdminReceiver. class ); boolean active=mDevicePolicyManager.isAdminActive(receiver); if (active){ boolean rs=mDevicePolicyManager.resetPassword(pwd,DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY); if (rs){ Toast.makeText( this , "密码修改成功" ,Toast.LENGTH_SHORT).show(); } else { Toast.makeText( this , "密码修改失败" ,Toast.LENGTH_SHORT).show(); } } else { Toast.makeText( this , "没有ActiveAdmin" ,Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult( int requestCode, int resultCode,Intentdata){ switch (requestCode){ case 1 : if (resultCode==RESULT_OK){ Toast.makeText( this , "设备管理器开启成功" ,Toast.LENGTH_SHORT).show(); } else { Toast.makeText( this , "设备管理器开启失败" ,Toast.LENGTH_SHORT).show(); } break ; case 2 : if (resultCode==RESULT_OK){ Toast.makeText( this , "密码规则设置成功" ,Toast.LENGTH_SHORT).show(); } else { Toast.makeText( this , "密码规则设置失败" ,Toast.LENGTH_SHORT).show(); } break ; default : break ; } } //自定义的设备管理广播接收类,可以重写DeviceAdminReceiver中的方法,来实现具体功能 public static class MyDeviceAdminReceiver extends DeviceAdminReceiver{ /** *重写其中方法 *<p> *More */ @Override public void onDisabled(Contextcontext,Intentintent){ super .onDisabled(context,intent); //设备管理禁用 } @Override public void onEnabled(Contextcontext,Intentintent){ super .onEnabled(context,intent); //设备管理启用 } } } 2.3 配置设备管理接收者 1 2 3 4 5 6 7 8 9 < activity android:name = ".activity.DeviceAdminActivity" /> < receiver android:name = ".activity.DeviceAdminActivity$MyDeviceAdminReceiver" android:permission = "android.permission.BIND_DEVICE_ADMIN" > < meta-data android:name = "android.app.device_admin" android:resource = "@xml/device_admin" /> < intent-filter > < action android:name = "android.app.action.DEVICE_ADMIN_ENABLED" /> </ intent-filter > </ receiver > xml/device_admin内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <? xml version = "1.0" encoding = "utf-8" ?> < device-admin xmlns:android = "http://schemas.android.com/apk/res/android" > < uses-policies > <!--设置密码规则;控制屏幕锁的密码长度和允许的字符--> < limit-password /> <!--监视屏幕锁解锁尝试的次数;如果输入错误次数过多则锁定手机或者清除所有数据--> < watch-login /> <!--重置屏幕锁的密码;重新设置新的屏幕锁密码--> < reset-password /> <!--强制锁屏;控制屏幕锁屏的方式和时间--> < force-lock /> <!--擦除数据;恢复出厂设置清除说有数据--> < wipe-data /> <!--禁用相机;禁止使用所有设备摄像头--> < disable-camera /> <!--加密数据;对存储的应用数据进行加密--> < encrypted-storage /> <!--密码过期;强制用户更改屏幕锁密码的频率--> < expire-password /> </ uses-policies > </ device-admin > 示例生成apk,该应用具体了设备管理的功能。 本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1718579,如需转载请自行联系原作者

优秀的个人博客,低调大师

weekend110(Hadoop)的 第四天笔记

课程目录 01-复习 02-hadoop中的序列化机制 03-流量求和mr程序开发 04-hadoop的自定义排序实现 05-mr程序中自定义分组的实现 06-shuffle机制 07-mr程序的组件全貌 08-textinputformat对切片规划的源码分析 09-倒排索引的mr实现 10-多个job在同一个main方法中提交 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5896338.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android笔记:inflate的三个参数及其用法

inflate()的作用就是将一个用xml定义的布局文件查找出来,注意与findViewById()的区别,inflate是加载一个布局文件,而findViewById则是从布局文件中查找一个控件。 1.获取LayoutInflater对象有三种方法 LayoutInflater inflater=LayoutInflater.from(this); LayoutInflater inflater=getLayoutInflater(); LayoutInflater inflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); 2.关于LayoutInflater类inflate(int resource, ViewGroup root, boolean attachToRoot)方法三个参数的含义 resource:需要加载布局文件的id,意思是需要将这个布局文件中加载到Activity中来操作。 root:需要附加到resource资源文件的根控件,什么意思呢,就是inflate()会返回一个View对象,如果第三个参数attachToRoot为true,就将这个root作为根对象返回,否则仅仅将这个root对象的LayoutParams属性附加到resource对象的根布局对象上,也就是布局文件resource的最外层的View上,比如是一个LinearLayout或者其它的Layout对象。 attachToRoot:是否将root附加到布局文件的根视图上 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1675563,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android笔记:常见错误问题及解决方法汇总

1.Android java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() E/AndroidRuntime(7200):Uncaughthandler:threadThread-8exitingduetouncaughtexception E/AndroidRuntime(7200):java.lang.RuntimeException:Can'tcreatehandlerinsidethreadthathasnotcalledLooper.prepare() 原因是非主线程中默认没有创建Looper对象,需要先调用Looper.prepare()启用Looper。 解决方法: new Thread() { public void run() { Looper.prepare(); mPst.startPushService(); mPst.sendJson2Server(qJson);//上线发消息给server Looper.loop(); } }.start(); 加上上面红色两行。 2.java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131362336, class android.widget.ListView) with Adapter(class com.manjay.housebox.slidemenu.SpecialListFragment$SpecialAdapter)] java.lang.IllegalStateException: ThecontentoftheadapterhaschangedbutListViewdidnotreceiveanotification. Makesurethecontentofyouradapterisnotmodifiedfromabackgroundthread, butonlyfromtheUIthread. [inListView(2131362336,classandroid.widget.ListView)withAdapter(classcom.manjay.housebox.slidemenu.SpecialListFragment$SpecialAdapter)] 错误的大体意思是:你的adapter的内容变化了,但是你的ListView并不知情。请保证你adapter的数据在主线程中进行更改! 解决方法: 1、检查Thread,确定没有在Background thread中直接调用adapter,如果有,请移除相关代码到Handler中处理; 2、尽量将数据放在adapter类中管理,不需要的时候清除信息(勤写clear()),及时用notifyDataSetChanged()刷新; 3、在Activity或者Fragment合适的位置(onPause/onStop)要及时检查thread,有adapter数据处理相关的应马上停止; 4、这个错误经常出现在Activity休眠起来之后,主要还是使用adapter不太小心造成的。如果实在找不到原因,在onPause()函数中停止所有的background thread,并且在onResume()函数最前面清空adapter中的数据,并且adapter.notifyDataSetChanged()。然后重新更新加载数据,这样一般可以解决问题。 经过尝试,问题最终通过第二种方法解决了。 实现方法如下: classSpecialAdapterextendsBaseAdapter { //将数据集合转移到适配器里 privateArrayList<SpecialInfo>dataList; @Override publicViewgetView(intposition,ViewconvertView,ViewGroupparent) { if(convertView==null) { LayoutInflaterinflater=getActivity().getLayoutInflater(); convertView=inflater.inflate(R.layout.speciallist_item,null); } ImageViewiv_main=ViewHolder.get(convertView,R.id.speciallist_item_image); TextViewtv_title=ViewHolder.get(convertView,R.id.speciallist_item_title); SpecialInfodata=dataList.get(position); if(position==0) { layoutView.setVisibility(View.GONE); } else { layoutView.setVisibility(View.VISIBLE); } Bitmapbm=BitmapFactory.decodeResource(getActivity().getResources(),data.icon); iv_main.setImageBitmap(bm); tv_title.setText(data.title); returnconvertView; } @Override publicintgetCount() { returndataList==null?0:dataList.size(); } @Override publicObjectgetItem(intposition) { returnnull; } @Override publiclonggetItemId(intposition) { return0; } //更新数据 publicvoidsetDataList(ArrayList<SpecialInfo>list) { if(list!=null) { dataList=(ArrayList<SpecialInfo>)list.clone(); notifyDataSetChanged(); } } //释放数据 publicvoidclearDataList() { if(dataList!=null) { dataList.clear(); } notifyDataSetChanged(); } } 注: 1.将所有数据“完全”保存在adapter内部,即使有外部数据进入,也会用.clone()重新生成副本,保证了数据完全是由adapter维护的。 2.保证所有setDeviceList()/clearDeviceList()是从主线程里调用的。 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1436329,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android开发学习笔记:Activity的生命周期浅析

1.Android系统中Activity作为Activity栈(Stack)被管理的,大家都知道栈的特点是先进后出,所以当前活动的Activity处于栈顶,之前非活动的Activity被压入栈底,等待是否可能被恢复为活动状态。 Android API中所提供的Activity生命周期图: 2.下面的整个Activity生命周期中的所有方法,我们可以根据程序的需要来覆盖相应的方法: publicclassActivityextendsApplicationContext{ //创建的时候调用 protectedvoidonCreate(BundlesavedInstanceState); //启动的时候调用 protectedvoidonStart(); //重新启动的时候调用 protectedvoidonRestart(); //恢复的时候调用 protectedvoidonResume(); //暂停的时候调用 protectedvoidonPause(); //停止的时候调用 protectedvoidonStop(); //销毁的时候调用 protectedvoidonDestroy(); } onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问! onStart():activity变为在屏幕上对用户可见时调用。 onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的) onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈。 onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。 onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动 onDestroy():activity被完全从系统内存中移除时调用 3.下面通过实例来测试Activity的生命周期中各个方法的调用情况,将Activity的所有方法都覆盖,主要用Log打印输出信息,并通过日志(LogCat)方式来观察运行结果。Log.v(String tag, String msg); //Verbose Log.d(String tag, String msg); //Debug Log.i(String tag, String msg); //Info Log.w(String tag, String msg); //Warning Log.e(String tag, String msg); //Error tag类似标签,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件。 下面的实例是测试Activity的生命周期中各个方法的调用情况: MainActivity.java packagecom.android.TestAvtivity.activity; importandroid.app.Activity; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; publicclassMainActivityextendsActivity{ privateButtonbtn; privatestaticfinalStringTAG="MainActivity"; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //输出日志 Log.i(TAG,"MainActivityonCreate--->"); btn=(Button)findViewById(R.id.Button1); btn.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //结束当前的Activity MainActivity.this.finish(); } }); } @Override //启动 protectedvoidonStart(){ super.onStart(); //输出日志信息 Log.i(TAG,"MainActivityonStart--->"); } @Override //重启 protectedvoidonRestart(){ super.onRestart(); //输出日志信息 Log.i(TAG,"MainActivityonRestart--->"); } @Override //恢复 protectedvoidonResume(){ super.onResume(); //输出日志信息 Log.i(TAG,"MainActivityonResume--->"); } @Override //暂停 protectedvoidonPause(){ super.onPause(); //输出日志信息 Log.i(TAG,"MainActivityonPause--->"); } @Override //停止 protectedvoidonStop(){ super.onStop(); //输出日志信息 Log.i(TAG,"MainActivityonStop--->"); } @Override //销毁 protectedvoidonDestroy(){ super.onDestroy(); //输出日志信息 Log.i(TAG,"MainActivityonDestroy--->"); } } main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试Activit生命周期" /> <Button android:id="@+id/Button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭Activity" /> </LinearLayout> 效果图: ①当启动程序时,日志的输出结果如下图所示,程序执行了onCreate()->onStart()->onResume三个方法。输出如下: MainActivity onCreate---> MainActivity onStart---> MainActivity onResume---> 注意:这里我是在选择了绿色的“+”,这时出现了下图的界面,之后我就在Filter Name上写入Test,by Log Tag上写入MainActivity,按OK保存,这时就能在LogCat上面筛选我们想要看到的信息了。 ②当按(返回键)或者按钮时,日志的输出结果如下图所示,程序先后调用了onPause( )->onStop( )->onDestory( )三个方法。 ③当按(Home键)时,日志的输出结果如下图所示,程序先后调用了onPause( )->onStop( )这两个方法,这时候应用程序并没有销毁。 ④当再次启动程序时,日志的输出结果如下图所示,程序先后调用了onRestart( )->onStart( )->onResume( )三个方法。 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/636913

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册