由于不同Android手机厂商提供的系统闹钟包名都不一致,所以只能通过过滤当前手机所有的应用,以确定闹钟应用的包名,进而启动它。

这里采用的过滤规则是:系统应用 && 应用的PackageName包含"widget" 和 "clock"

1>布局文件  activity_main.xml

    

2>MainActivity.java

package com.demo.cxc.systemclocksample;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private Button startSystemClockButton = null;    private List allPackageInfos;//系统安装所有软件    private List clockPackageInfos;//系统时钟软件    private static final int HANDLE_MESSAGE_KEY = 1001;    private Handler myHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg != null) {                switch (msg.what) {                    case HANDLE_MESSAGE_KEY:                        Toast.makeText(getApplicationContext(), "--app scan over--", Toast.LENGTH_SHORT).show();                        Log.d("CXC", "--app scan over--");                        break;                    default:                        break;                }            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initViews();        initData();        //begin scan installed applications;        //// TODO: 16/1/15        new Thread(new ScanInstalledAppsRunnable()).start();    }    private void initViews() {        startSystemClockButton = (Button) findViewById(R.id.start_system_clock_bt);        startSystemClockButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //// TODO: 16/1/15                startSystemClock();            }        });    }    private void initData() {        clockPackageInfos = new ArrayList();    }    class ScanInstalledAppsRunnable implements Runnable {        @Override        public void run() {            allPackageInfos = getPackageManager()                    .getInstalledPackages(0);            if (allPackageInfos == null || allPackageInfos.size() == 0) {                //// TODO: 16/1/15 todo nothing                return;            }            if (clockPackageInfos == null) {                clockPackageInfos = new ArrayList();            }            PackageInfo tempPackageInfo = null;            for (int i = 0; i < allPackageInfos.size(); i++) {                tempPackageInfo = allPackageInfos.get(i);                if (tempPackageInfo != null) {                    if (isSystemApplication(tempPackageInfo.applicationInfo) &&                            isClockApplication(tempPackageInfo.packageName)) {                        clockPackageInfos.add(tempPackageInfo);                    }                }            }            Message message = myHandler.obtainMessage();            message.what = MainActivity.HANDLE_MESSAGE_KEY;            myHandler.sendMessage(message);        }    }    private boolean isSystemApplication(ApplicationInfo applicationInfo) {        boolean isSystemApp = false;        if (applicationInfo != null) {            if ((applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0                    || (applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {                isSystemApp = true;            }        }        return isSystemApp;    }    private boolean isClockApplication(String packageName) {        boolean isClockApp = false;        if (packageName != null && packageName.contains("clock") && !packageName.contains("widget")) {            isClockApp = true;        }        return isClockApp;    }    private void startSystemClock() {        if (clockPackageInfos == null || clockPackageInfos.size() == 0) {            Toast.makeText(getApplicationContext(), "--启动系统闹钟失败1--", Toast.LENGTH_SHORT).show();            return;        }        Log.d("CXC", "---clock package size :" + clockPackageInfos.size());        Log.d("CXC", "---clock package [0] :" + clockPackageInfos.get(0).packageName);        try {            Intent startSysClockIntent = getPackageManager().getLaunchIntentForPackage(clockPackageInfos.get(0).packageName);            startActivity(startSysClockIntent);        } catch (Exception e) {            Toast.makeText(getApplicationContext(), "--启动系统闹钟失败2--", Toast.LENGTH_SHORT).show();        }    }}


更多相关文章

  1. linux内核启动android文件系统过程分析
  2. 《Android系统级深入开发—移植与调试 》china-pub新书上架
  3. Android Activity 界面跳转动画(系统、自定义)
  4. 第2课第1节_Android灯光系统_led_class驱动
  5. Android 振动器(Vibrator)系统
  6. Android系统中的广播(Broadcast)机制注册注销发送原理总结
  7. Android系统的Binder机制分析
  8. 巨人的崛起 Android操作系统发展历程
  9. 我来说说Android touch 系统的设计哲学

随机推荐

  1. MySQL5.7的安装与配置详细操作步骤
  2. Linux平台mysql开启远程登录
  3. Ubuntu下MySQL中文乱码的问题解决
  4. MySQL使用innobackupex备份连接服务器失
  5. 什么是分表和分区 MySql数据库分区和分表
  6. navicat连接mysql时出现1045错误的解决方
  7. mysql5.7创建用户授权删除用户撤销授权
  8. linux下mysql5.7.17最新稳定版本安装教程
  9. MySQL 复制表详解及实例代码
  10. 浅谈mysql中concat函数,mysql在字段前/后