由于不同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. Android活动的四种启动模式
  2. Android启动过程深入解析
  3. 安卓开发学习之012 TextView高级应用
  4. Android启动模式
  5. Android应用程序设计——入门配置
  6. 谈谈你对Android(安卓)NDK的理解
  7. Android中Activity启动模式详解
  8. Android权限管理
  9. AndroidManifest拾遗

随机推荐

  1. Android(安卓)ListView上下滑动与item左
  2. android传感器Gsensor和Psensor的使用举
  3. android quicksearchbox修改默认搜索引擎
  4. Android开发心得整理
  5. android系统属性读写操作SystemPropertie
  6. 【JAVA】给大家推荐一道有意思的java测试
  7. ButterKnife--View注入框架
  8. Android添加一个新的按键Key
  9. android 网络定位失败 location为null的
  10. Android简单笔记本解析