微信号:ardays

介绍:android每日绝对干货

Android之你不可不知道的小知识

2016-08-18 20:11 文/宝塔山上的猫

打开软件安装页面

        一般下载完APK文件之后,都要打开软件安装页面,提示用户进行安装,可以用以下方法(固定写法)

Intent intent = new Intent();

intent.setAction("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.setDataAndType(Uri.fromFile(new File("apk在手机中的路径/要安装的软件.apk")), "application/vnd.android.package-archive");

startActivityForResult(intent, 0);


分享软件信息

        如果想要分享软件,需要写好预定要分享出去的信息,可用以下方法:

Intent intent = new Intent();

intent.setAction("android.intent.action.SEND");

intent.addCategory("android.intent.category.DEFAULT");

intent.setType("text/plain");

intent.putExtra(Intent.EXTRA_TEXT, "(自定义内容)这是一个很牛逼的软件,你信不信");

startActivity(intent);


打开软件详情页

此方法打开Android内关于软件的详情页,需要传入软件报名

Intent intent = new Intent();

intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");

intent.setData(Uri.parse("package:" + "要打开软件的包名"));

startActivity(intent);


打开其他软件

在自己的app中打开其他应用可以使用这个方法

PackageManager manager = getPackageManager();

Intent launchIntentForPackage = manager.getLaunchIntentForPackage("要打开软件的包名");

if (launchIntentForPackage != null) {

    startActivity(launchIntentForPackage);

}


跳转到从应用直接跳转到主界面的方法

//跳转到主界面

Intent intent = new Intent();

intent.setAction("android.intent.action.MAIN");

intent.addCategory("android.intent.category.HOME");

startActivity(intent);


注册开屏锁屏的广播接收者

    注册开屏锁屏的广播的IntentFliter所要添加的action是

  • Intent.ACTION_SCREEN_OFF // 锁屏时添加

  • Intent.ACTION_SCREEN_ON  // 开屏是添加




清理所有空进程的方法

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

//获取正在运行进程

List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();

for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {

    //判断我们的应用进程不能被清理

    if (!runningAppProcessInfo.processName.equals(getPackageName())) {

        am.killBackgroundProcesses(runningAppProcessInfo.processName);

    }

}



内存卡和SD卡可用空间的方法

/**

  * 获取SD卡可用空间

  */

public static long getAvailableSD(){

     //获取SD卡路径

     File path = Environment.getExternalStorageDirectory();

     //硬盘的API操作

             StatFs stat = new StatFs(path.getPath());

             long blockSize = stat.getBlockSize();//获取每块的大小

             long totalBlocks = stat.getBlockCount();//获取总块数

             long availableBlocks = stat.getAvailableBlocks();//获取可用的块数

             return availableBlocks*blockSize;

        }

        /**

     *获取内存可用空间

     * @return

     */

    public static long getAvailableROM(){

        //获取内存路径

        File path = Environment.getDataDirectory();

        //硬盘的API操作

            StatFs stat = new StatFs(path.getPath());

            long blockSize = stat.getBlockSize();//获取每块的大小

            long totalBlocks = stat.getBlockCount();//获取总块数

            long availableBlocks = stat.getAvailableBlocks();//获取可用的块数

            return availableBlocks*blockSize;

        }



获取剩余内存和总内存的方法

/**

         * 获取剩余内存

         * @return

         */

    public static long getAvailableRam(Context context){

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

        //获取内存的信息,保存到memoryinfo中

        MemoryInfo outInfo = new MemoryInfo();

        am.getMemoryInfo(outInfo);

        //获取空闲的内存

        //outInfo.availMem;

        //        //获取总的内存

        //        outInfo.totalMem;

        return outInfo.availMem;

    }

 

    /**

         * 获取总的内存

         * @return

         * @deprecated

         */

public static long getTotalRam(Context context){

    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    //获取内存的信息,保存到memoryinfo中

    MemoryInfo outInfo = new MemoryInfo();

    am.getMemoryInfo(outInfo);

    //获取空闲的内存

    //outInfo.availMem;

    //  //获取总的内存

    //  outInfo.totalMem;

    return outInfo.totalMem;//16版本之上才有,之下是没有的

}



直接打开系统联系人界面,并且获取联系人号码的方法

        使用startActivityForResult()开启Activity,然后再onActivityResult()方法中获取返回的联系人号码

// 在按钮点击事件中设置Intent,

Intent intent = new Intent();

intent.setAction("android.intent.action.PICK");

intent.addCategory("android.intent.category.DEFAULT");

intent.setType("vnd.android.cursor.dir/phone_v2");

startActivityForResult(intent, 1);

 

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if(data !=null){

        Uri uri = data.getData();

        String num = null;

        // 创建内容解析者

                ContentResolver contentResolver = getContentResolver();

                Cursor cursor = contentResolver.query(uri,

                        null, null, null, null);

                        while(cursor.moveToNext()){

                            num = cursor.getString(cursor.getColumnIndex("data1"));

                        }

                        cursor.close();

                        num = num.replaceAll("-", "");//替换的操作,555-6 -&gt; 5556

                    }

                }


获取短信并保存到XML文件中的方法(备份短信)

获取手机中的短信信息,并保存为XML文件,路径为:/mnt/sdcard/backupsms.xml

/**

 * 获取短信

 */

public static void getAllSMS(Context context){

    //1.获取短信

    //1.1获取内容解析者

    ContentResolver resolver = context.getContentResolver();

    //1.2获取内容提供者地址   sms,sms表的地址:null  不写

    //1.3获取查询路径

    Uri uri = Uri.parse("content://sms");

    //1.4.查询操作

    //projection : 查询的字段

    //selection : 查询的条件

    //selectionArgs : 查询条件的参数

    //sortOrder : 排序

    Cursor cursor = resolver.query(uri, new String[]{"address","date","type","body"}, null, null, null);

    //设置最大进度

    int count = cursor.getCount();//获取短信的个数

 

    //2.备份短信

    //2.1获取xml序列器

    XmlSerializer xmlSerializer = Xml.newSerializer();

    try {

        //2.2设置xml文件保存的路径

        //os : 保存的位置

        //encoding : 编码格式

        xmlSerializer.setOutput(new FileOutputStream(new File("/mnt/sdcard/backupsms.xml")), "utf-8");

        //2.3设置头信息

        //standalone : 是否独立保存

        xmlSerializer.startDocument("utf-8", true);

        //2.4设置根标签

        xmlSerializer.startTag(null, "smss");

        //1.5.解析cursor

        while(cursor.moveToNext()){

            SystemClock.sleep(1000);

            //2.5设置短信的标签

            xmlSerializer.startTag(null, "sms");

            //2.6设置文本内容的标签

            xmlSerializer.startTag(null, "address");

            String address = cursor.getString(0);

            //2.7设置文本内容

            xmlSerializer.text(address);

            xmlSerializer.endTag(null, "address");

 

            xmlSerializer.startTag(null, "date");

            String date = cursor.getString(1);

            xmlSerializer.text(date);

            xmlSerializer.endTag(null, "date");

 

            xmlSerializer.startTag(null, "type");

            String type = cursor.getString(2);

            xmlSerializer.text(type);

            xmlSerializer.endTag(null, "type");

 

            xmlSerializer.startTag(null, "body");

            String body = cursor.getString(3);

            xmlSerializer.text(body);

            xmlSerializer.endTag(null, "body");

 

            xmlSerializer.endTag(null, "sms");

            System.out.println("address:"+address+"   date:"+date+"  type:"+type+"  body:"+body);

 

        }

        xmlSerializer.endTag(null, "smss");

        xmlSerializer.endDocument();

        //2.8将数据刷新到文件中

        xmlSerializer.flush();

    } catch (Exception e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

}



  今天的干货就到这里了,每天有各种干货等着你.各种实用的Demo等着你下载。喜欢的用户可以长按下图的二维码进行关注哦.


 
Android每日干货 更多文章 5 个顶级 Android 开源库 模仿荷包启动动画 android日常开发总结的技术经验60条 还在用Android自带的WebView组件?太Out了! Activity切换淡入淡出效果
猜您喜欢 自古网页出美女,光棍节来送福利 深入浅出 RecyclerView 打通Android Gradle编译过程的任督二脉 数据狂人必备的10本全球畅销书 I/O 2016 大会上 Google Play 新面貌