zoukankan      html  css  js  c++  java
  • Android小技巧总结1

    0、Android彻底退出引用程序的方法

    1) Dalvik VM的本地方法

        android.os.Process.killProcess(android.os.Process.myPid()); // 获取PID
        System.exit(0); // 常规java的标准退出法,返回值为0代表正常退出 

    2)任务管理器方法

       首先要说明该方法执行在Android 1.5 API Level为3以上才干够。同一时候须要权限

       // 获取ActivityManager实例
        ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
        am.restartPackage(getPackageName());
      系统会将,该包下的 ,所有进程。服务,所有杀掉。就能够杀干净了,要注意加上权限声明:

      <!-- 权限声明 -->
      <uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

    3) 依据Activity的声明周期 

        我们知道Android的窗体类提供了历史栈。我们能够通过stack的原理来巧妙的实现,这里我们在A窗体打开B窗体时在Intent中直接增加标志     Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的全部Activity。

        在A窗体中使用以下的代码调用B窗体

        Intent intent = new Intent();
        intent.setClass(Android123.this, CWJ.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置
        startActivity(intent);

        接下来在B窗体中须要退出时直接使用finish方法就可以所有退出。

    4)使用SingleTask模式

     将主Activity(记为MainActivity)设置为SingleTask模式,须要退出程序时,能够先跳转到MainActivity。然后调用finish函数退出程序。

    5)将全部Activity注冊一个接收finish消息的广播

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        IntentFilter filter = new IntentFilter();
        filter.addAction("finish");
        registerReceiver(mFinishReceiver, filter);
        ……
    }
    private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if ("finish".equals(intent.getAction())) {
                finish();
            }
        }
    };

    6)自己定义一个Activity栈,道理同上,只是利用一个单例模式的Activity栈来管理全部Activity,并加入提供了可以退出全部Activity的方法。代码例如以下:

    public class ScreenManager {
        private static Stack<Activity> activityStack;
        private static ScreenManager instance;
        private ScreenManager() {
        }
        public static ScreenManager getScreenManager() {
            if (instance == null) {
                instance = new ScreenManager();
            }
            return instance;
        }
        // 退出栈顶Activity
        public void popActivity(Activity activity) {
            if (activity != null) {
                activity.finish();
                activityStack.remove(activity);
                activity = null;
            }
        }
     
        // 获得当前栈顶Activity
        public Activity currentActivity() {
            Activity activity = activityStack.lastElement();
            return activity;
        }
     
        // 将当前Activity推入栈中
        public void pushActivity(Activity activity) {
            if (activityStack == null) {
                activityStack = new Stack<Activity>();
            }
            activityStack.add(activity);
        }
       
        // 退出栈中全部Activity
        public void popAllActivityExceptOne(Class cls) {
            while (true) {
                Activity activity = currentActivity();
                if (activity == null) {
                    break;
                }
                if (activity.getClass().equals(cls)) {
                    break;
                }
                popActivity(activity);
            }
        }
    }

    引申:按两次返回键退出程序:
        //监听返回键,点击两次退出
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                onBackCodePressed();
            }
            return false;
        }
       
        private int mPressedTime = 0;
        private void onBackCodePressed() {
            // 表示第一次点击
            if(mPressedTime == 0){
                Toast.makeText(this, "连续点击退出程序 ", Toast.LENGTH_SHORT).show();
                ++mPressedTime;
               
                new Thread(){
                    @Override
                    public void run() {
                        try {
                            sleep(2000);
                        } catch (Exception e) {
                            Log.e(TAG, e.toString());
                        } finally {
                            mPressedTime = 0;
                        }
                    }
                };
            } else {
                android.os.Process.killProcess(android.os.Process.myPid());
            }
        }

    1、绘制边框
    <?xml version="1.0"encoding="utf-8"?

    > <!-- 绘制边框 --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:right="0dp"> <shape android:shape="rectangle"> <solid android:color="@color/white"/> </shape> </item> <item android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp"> <shape android:shape="rectangle"> <solid android:color="@color/orchid"/> </shape> </item> </layer-list>


    2、在Android中推断字符串是否为null,或者字符串是否为空串,能够直接使用

        TextUtils.isEmpty(str);

    TextUtils.isEmpty源代码:

    public static boolean isEmpty(CharSequence str) {
        if (str == null || str.length() == 0)
            return true;
        else
            return false;
    }

    3、推断横屏竖屏并进行切换:  
    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
        setContentView(R.layout.横屏);
    }
    else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        setContentView(R.layout.竖屏);
    }

    4、替代反复的findViewbyId书写:
       public <T> T $(int viewID) {
            return (T) findViewById(viewID);
        }

    使用实例:
        TextView a;
        a = $(R.id.a_id);

    5、获取系统当前时间并格式化
    方法一:
            SimpleDateFormat formatter = new SimpleDateFormat(
                    "yyyy年MM月dd日   HH:mm:ss");
            Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
            String str = formatter.format(curDate);

    方法二:
        String label = DateUtils.formatDateTime( 
                getApplicationContext(), 
                System.currentTimeMillis(), 
                DateUtils.FORMAT_SHOW_TIME 
                        | DateUtils.FORMAT_SHOW_DATE 
                        | DateUtils.FORMAT_ABBREV_ALL);


    6、获得一个字符串(包含中文字符串)首字母的英文字母:
    private final static int[] li_SecPosValue = { 1601, 1637, 1833, 2078, 2274,
            2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858,
            4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };
    private final static String[] lc_FirstLetter = { "A", "B", "C", "D", "E",
            "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
            "T", "W", "X", "Y", "Z" };
    // 获得每一个string的首字母
    /**
     * 取得给定汉字的首字母,即声母
     * @param chinese 给定的汉字
     * @return 给定汉字的声母
     */
    public String getFirstLetter(String chinese) {
        if (chinese == null || chinese.trim().length() == 0) {
            return "";
        }
        chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");
    
        if (chinese.length() > 1) { // 推断是不是汉字
            int li_SectorCode = (int) chinese.charAt(0); // 汉字区码
            int li_PositionCode = (int) chinese.charAt(1); // 汉字位码
            li_SectorCode = li_SectorCode - 160;
            li_PositionCode = li_PositionCode - 160;
            int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; // 汉字区位码
            if (li_SecPosCode > 1600 && li_SecPosCode < 5590) {
                for (int i = 0; i < 23; i++) {
                    if (li_SecPosCode >= li_SecPosValue[i]
                            && li_SecPosCode < li_SecPosValue[i + 1]) {
                        chinese = lc_FirstLetter[i];
                        break;
                    }
                }
            } else { // 非汉字字符,如图形符号或ASCII码
                chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");
                chinese = chinese.substring(0, 1);
            }
        }
    
        return chinese;
    }
    
    /**
     * 字符串编码转换
     * @param str 要转换编码的字符串
     * @param charsetName 原来的编码
     * @param toCharsetName 转换后的编码
     * @return 经过编码转换后的字符串
     */
    private String conversionStr(String str, String charsetName,String toCharsetName) {
        try {
            str = new String(str.getBytes(charsetName), toCharsetName);
        } catch (UnsupportedEncodingException ex) {
            System.out.println("字符串编码转换异常:" + ex.getMessage());
        }
        return str;
    }
    

    7、中文字母按字典序排序:
    private ArrayList<String> mItems;
    Collections.sort(mItems, Collator.getInstance(java.util.Locale.CHINA)); // 排序

    8、检查WIFI是否开启、连接:
        //是否连接WIFI
        public static boolean isWifiConnected(Context context)
        {
            ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            return wifiNetworkInfo.isConnected();
        }
    
    
        /**** 打开WIFI***/
        public static boolean openWifi(Context context){
            return opclWifi(context, true);
        }
       
        /**** 关闭WIFI***/
        public static boolean closeWifi(Context context){
            return opclWifi(context, false);
        }
       
        /**** 打开关闭WIFI****/
        private static boolean opclWifi(Context context, boolean type){
            boolean result = true;
            // 获取WIFIManager实例
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
       
            if (wifiManager.isWifiEnabled() ^ type) {
                 // 打开关闭WIFI
                 result = wifiManager.setWifiEnabled(type);
            }
       
            return result;
        }

    加入权限:

        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    9、int数据转化成十六进制。二进制。八进制。无符号数字符串:

        public static void printInt(int i) {
        	System.out.println(Integer.toBinaryString(i));   // 二进制输出
        	System.out.println(Integer.toHexString(i));      // 十六进制输出
        	System.out.println(Integer.toOctalString(i));    // 八进制输出
        	System.out.println(Integer.toUnsignedString(i)); // 转化成无符号数输出
        	System.out.println(Integer.toString(i));         // 转化成String输出
        }
    測试:

        	System.out.println("======== 输出正数 =========");
            int i = 100;
            printInt(i);
            System.out.println("======== 输出负 =========");
            i = -100;
            printInt(i);
    输出结果:

    ======== 输出正数 =========
    1100100
    64
    144
    100
    100
    ======== 输出负 =========
    11111111111111111111111110011100
    ffffff9c
    37777777634
    4294967196
    -100

  • 相关阅读:
    datatable里的元素
    ajax
    myeclipse编译项目Webcontent下不生成classes文件
    oracle忘记密码
    zuul的多版本配置
    ribbon灰度发布极简方式
    ribbon灰度发布
    使用网关zuul完成灰度发布
    mybatis-generator代码生成器使用(二)
    mybatis-generator代码生成器使用(一)
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7087206.html
Copyright © 2011-2022 走看看