首页 > 代码库 > android有用代码片段(一)

android有用代码片段(一)

 有时候,需要一些小的功能,找到以后,就把它贴到了博客下面,作为留言,查找起来很不方便,所以就整理一下,方便自己和他人。

         一、  获取系统版本号:

 

PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);int versionCode=nfo.versionCodestring versionName=info.versionNam

 

 

 

       二、获取系统信息:

<span style="font-size: 16px; ">String archiveFilePath="sdcard/download/Law.apk";//安装包路径PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ ApplicationInfo appInfo = info.applicationInfo; String appName = pm.getApplicationLabel(appInfo).toString(); String packageName = appInfo.packageName; //得到安装包名称String version=info.versionName; //得到版本信息 Toast.makeText(test4.this, "packageName:"+packageName+";version:"+version, Toast.LENGTH_LONG).show();Drawable icon = pm.getApplicationIcon(appInfo);//得到图标信息TextView tv = (TextView)findViewById(R.id.tv); //显示图标tv.setBackgroundDrawable(icon);</span>


        三、获取安装路径和已安装程序列表

<span style="font-size: 16px; ">(1)android中获取当前程序路径getApplicationContext().getFilesDir().getAbsolutePath()(2)android取已安装的程序列表List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0);</span>


       四、获取图片、应用名、包名

 

<span style="font-size: 16px; ">PackageManager pManager = MessageSendActivity.this.getPackageManager(); List<PackageInfo> appList = Utils.getAllApps(MessageSendActivity.this);      for(int i=0;i<appList.size();i++) {          PackageInfo pinfo = appList.get(i);          ShareItemInfo shareItem = new ShareItemInfo();          //set Icon          shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));          //set Application Name shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());         //set Package Name shareItem.setPackageName(pinfo.applicationInfo.packageName); }</span>

 

         五、解决listview上 Item上有按钮时 item本身不能点击的问题:

 

<span style="font-size: 16px; ">1. 在item试图上面添加代码: android:descendantFocusability="blocksDescendants"2.在listview里 添加代码 android:focusable="true"</span>

 

         六、不让文本框输入中文:

 

<span style="font-size: 16px; ">在xml文件里面</span>
<span style="font-size: 16px; ">android:digits="1234567890qwertyuiopasdfghjklzxcvbnm`-=[]\;,./~!@#$%^*()_+}{:?&<>"‘"这样就不会输入中文了。</span>

        
         七、获取屏幕宽高

 

<span style="font-size: 16px; ">DisplayMetrics displayMetrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int height = displayMetrics.heightPixels; int width = displayMetrics.widthPixels;</span>

 

         八、将TabWidget显示在屏幕下方

 

<span style="font-size: 16px; ">设置TabWidget的属性 android:layout_alignParentBottom="true"</span>

为 了让tabHost显示在下方,要将RadioGroup的layout_gravity设置为bottom,再将FrameLayout的 layout_weight设置为1,这样就可以将RadioGroup撑到最下方。style="@style/main_tab_bottom"里面 定义了样式文件      

       

   九、获取线程ID和线程名称:

 

<span style="font-size: 16px; ">Log.v("@@@@@@@@@@",Thread.currentThread().getId()+" "+Thread.currentThread().getName());</span>


        十、android中调用其它android应用

<span style="font-size: 16px; ">ComponentName comp = new ComponentName("com.Test","com.login.Main");  intent = new Intent();  intent.setComponent(comp);  intent.setAction("android.intent.action.VIEW");  startActivity(intent);</span>

 

         十一、禁止软键盘弹出

 

<span style="font-size: 16px; ">EditText有焦点(focusable为true)阻止输入法弹出 editText.setInputType(InputType.TYPE_NULL); // 关闭软键盘 当EidtText无焦点(focusable=false)时阻止输入法弹出 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);</span>

【Android】EditText标签调用键盘
在xml文件中EditText标签有一个属性android:editable="false"和android:numeric="integer"

android:numeric="integer"表示只允许输入数字,此属性可以限制用户只能输入数字内容。
android:editable表示是否可以输入内容TRUE表示可以输入,false表示不允许输入内容;
当为android:editable="false"时,点击输入框,虚拟键盘是显示不出来的,不过当设置了 android:editable=""属性时,不管是false还是true,在其后加入android:numeric="integer"属性时,是可以输入数字内容了;这里没搞明白是怎么回事,也许是numeric把前面的属性覆盖掉了。
当android:editable="false"时,在java类里如果再规定EditText.setEnabled(true)时,虚拟键盘还是不会显示的。


       十二、模拟器的各种规格与分辨率对照:
单位:像素 WVGA854: 854*480WVGA800: 800*480HVGA: 480*320 QVGA: 320*240WQVGA432:432*240 WQVGA400:400*240 
 
         十三、调用Android其他Context的Activity
Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);//载入这个类Class clazz = c.getClassLoader().loadClass("chroya.demo.Main");//新建一个实例Object owner = clazz.newInstance();//获取print方法,传入参数并执行Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello");
这个方法有两个参数:
1、packageName  包名,要得到Context的包名
2、 flags  标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。 CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思 是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
 
          十四、android4.0Dialog风格小技巧

4.0上如果还用Theme.Dialog,只能说很土,跟整体UI风格差别很大

请使用android:theme="@android:style/Theme.Holo.DialogWhenLarge"


          十五、程序中安装apk
    
   Intent intent = new Intent();                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    intent.setAction(android.content.Intent.ACTION_VIEW);    intent.setDataAndType(Uri.fromFile(“APK”),"application/vnd.android.package-archive");    startActivity(intent);
其中“apk”为你要安装的那个文件。

 

  十六、获取设备型号、SDK版本及系统版本

String device_model = Build.MODEL; // 设备型号  String version_sdk = Build.VERSION.SDK; // 设备SDK版本  String version_release = Build.VERSION.RELEASE; // 设备的系统版本  
 

            十七、图片分析功能

 

public void SharePhoto(String photoUri,final Activity activity) {      Intent shareIntent = new Intent(Intent.ACTION_SEND);      File file = new File(photoUri);      shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));      shareIntent.setType("image/jpeg");      StartActivity(Intent.createChooser(shareIntent, activity.getTitle()));  }  

         十八、让自己的应用不被kill掉
可以在frameworks\base\services\java\com\android\server\am\ActivityManagerService.java这个类的forceStopPackage中加一个条件:
 
public void forceStopPackage(final String packageName) {        if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES)                != PackageManager.PERMISSION_GRANTED) {            String msg = "Permission Denial: forceStopPackage() from pid="                    + Binder.getCallingPid()                    + ", uid=" + Binder.getCallingUid()                    + " requires " + android.Manifest.permission.FORCE_STOP_PACKAGES;            Slog.w(TAG, msg);            throw new SecurityException(msg);        }                long callingId = Binder.clearCallingIdentity();        try {            IPackageManager pm = ActivityThread.getPackageManager();            int pkgUid = -1;            synchronized(this) {                try {                    pkgUid = pm.getPackageUid(packageName);                } catch (RemoteException e) {                }                if (pkgUid == -1) {                    Slog.w(TAG, "Invalid packageName: " + packageName);                    return;                }                //begin:加入一个判断条件                if (packageName.equals("你的进程名")) {                    return;                }                //end: 加入一个判断条件                                forceStopPackageLocked(packageName, pkgUid);            }        } finally {            Binder.restoreCallingIdentity(callingId);        }    }
这样的话在任务管理器里可以保证KISS不掉的;
还有在这个方法上还有个方法clearApplicationUserData中保证如果是该进程就不让调用forceStopPackage()方法。
另:其他方法:
1,首先在你的service的onDestory方法里面写上启动你自己的代码,为什么要写这个?因为如果用户是在设置->应用程序->正在运行服务这里面杀掉你service的话会调用到onDestory方法的,这里就可以启动了,
2:监听屏幕关闭广播,屏幕已关闭,就启动服务。
3:监听屏幕解锁广播,一样的道理,这样,基本上,你的service就达到永不停止了。对用户来说有点变态,但很多软件都这样。
    
  十九、EditText获取焦点:
EditText.requestFoucus()