啓動第三方或系統的應用

public class OpenAppUtils {

    /**
     * 已知包名和啓動類
     *
     * @param context
     * @param packageName
     * @param className
     */
    public static void startApp(Context context, String packageName, String className) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        //intent.addCategory(Intent.CATEGORY_LAUNCHER);
        ComponentName cn = new ComponentName(packageName, className);
        intent.setComponent(cn);
        if (context instanceof Activity) {
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        } else {
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        context.startActivity(intent);
    }

    /**
     * 已知包名和啓動類
     *
     * @param context
     * @param packageName
     * @param className
     * @param args
     */
    public static void startApp(Context context, String packageName, String className, Bundle args) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        //intent.addCategory(Intent.CATEGORY_LAUNCHER);
        ComponentName cn = new ComponentName(packageName, className);
        intent.setComponent(cn);
        if (context instanceof Activity) {
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        } else {
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        intent.putExtras(args);
        context.startActivity(intent);
    }




    /**
     * 只知包名不知類名
     * @param context
     * @param packageName
     */
    public static void openApp(Context context, String packageName) {
        PackageManager pm = context.getPackageManager();
        PackageInfo pi = null;
        try {
            pi = pm.getPackageInfo(packageName, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        resolveIntent.setPackage(pi.packageName);

        // 返回符合條件的ACTIVITY集合
        List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);
        // 只要符合條件就啓動,太多了就不知道啓動哪個了
        ResolveInfo ri = apps.iterator().next();
        if (ri != null) {
            String packageNameTemp = ri.activityInfo.packageName;
            String classNameTemp = ri.activityInfo.name;
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            if (context instanceof Activity) {
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            } else {
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            }
            ComponentName cn = new ComponentName(packageNameTemp, classNameTemp);
            intent.setComponent(cn);
            context.startActivity(intent);
        }
    }


    /**
     * 打開設置界面
     * 經過測試,使用下面字段可以在軟件中直接打開相應的系統界面
       com.android.settings.AccessibilitySettings 輔助功能設置
       com.android.settings.ActivityPicker 選擇活動
       com.android.settings.ApnSettings APN設置
       com.android.settings.ApplicationSettings 應用程序設置
       com.android.settings.BandMode 設置GSM/UMTS波段
       com.android.settings.BatteryInfo 電池信息
       com.android.settings.DateTimeSettings 日期和壩上旅遊網時間設置
       com.android.settings.DateTimeSettingsSetupWizard 日期和時間設置
       com.android.settings.DevelopmentSettings 應用程序設置=》開發設置
       com.android.settings.DeviceAdminSettings 設備管理器
       com.android.settings.DeviceInfoSettings 關於手機
       com.android.settings.Display 顯示——設置顯示字體大小及預覽
       com.android.settings.DisplaySettings 顯示設置
       com.android.settings.DockSettings 底座設置
       com.android.settings.IccLockSettings SIM卡鎖定設置
       com.android.settings.InstalledAppDetails 語言和鍵盤設置
       com.android.settings.LanguageSettings 語言和鍵盤設置
       com.android.settings.LocalePicker 選擇手機語言
       com.android.settings.LocalePickerInSetupWizard 選擇手機語言
       com.android.settings.ManageApplications 已下載(安裝)軟件列表
       com.android.settings.MasterClear 恢復出廠設置
       com.android.settings.MediaFormat 格式化手機閃存
       com.android.settings.PhysicalKeyboardSettings 設置鍵盤
       com.android.settings.PrivacySettings 隱私設置
       com.android.settings.ProxySelector 代理設置
       com.android.settings.RadioInfo 手機信息
       com.android.settings.RunningServices 正在運行的程序(服務)
       com.android.settings.SecuritySettings 位置和安全設置
       com.android.settings.Settings 系統設置
       com.android.settings.SettingsSafetyLegalActivity 安全信息
       com.android.settings.SoundSettings 聲音設置
       com.android.settings.TestingSettings 測試——顯示手機信息、電池信息、使用情況統計、Wifi information、服務信息
       com.android.settings.TetherSettings 綁定與便攜式熱點
       com.android.settings.TextToSpeechSettings 文字轉語音設置
       com.android.settings.UsageStats 使用情況統計
       com.android.settings.UserDictionarySettings 用戶詞典
       com.android.settings.VoiceInputOutputSettings 語音輸入與輸出設置
       com.android.settings.WirelessSettings 無線和網絡設置
     * @param context
     */
    public static void openSetting(Context context){
        //判斷手機系統的版本  即API大於10 就是3.0或以上版本
        if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1){
            Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }else{
            Intent intent = new Intent();
            ComponentName component = new ComponentName("com.android.settings", "com.android.settings.Settings");
            intent.setComponent(component);
            intent.setAction("android.intent.action.VIEW");
            context.startActivity(intent);
        }
    }


    /**
     * 打開無線和網絡設置界面
     * @param context
     */
    public static void openNetSetting(Context context){
        //判斷手機系統的版本  即API大於10 就是3.0或以上版本
        if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1){
            Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }else{
            Intent intent = new Intent();
            ComponentName component = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
            intent.setComponent(component);
            intent.setAction("android.intent.action.VIEW");
            context.startActivity(intent);
        }
    }

    /**
     * 打開wifi設置界面
     * @param context
     */
    public static void openWifiSetting(Context context){
        //判斷手機系統的版本  即API大於10 就是3.0或以上版本
        if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1){
            Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }else{
            Intent intent = new Intent();
            ComponentName component = new ComponentName("com.android.settings", "com.android.settings.WifiSettings");
            intent.setComponent(component);
            intent.setAction("android.intent.action.VIEW");
            context.startActivity(intent);
        }
    }

    /**
     * 打開藍牙設置界面
     * @param context
     */
    public static void openBluetoothSetting(Context context){
        //判斷手機系統的版本  即API大於10 就是3.0或以上版本
        if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1){
            Intent intent = new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }else{
            Intent intent = new Intent();
            ComponentName component = new ComponentName("com.android.settings", "com.android.settings.BluetoothSettings");
            intent.setComponent(component);
            intent.setAction("android.intent.action.VIEW");
            context.startActivity(intent);
        }
    }

    /**
     * 打開關於界面
     * @param context
     */
    public static void openAboutSetting(Context context){
        Intent intent = new Intent(android.provider.Settings.ACTION_DEVICE_INFO_SETTINGS);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * 打開撥打電話界面
     * @param context
     */
    public static void openCall(Context context){
        Intent intent = new Intent();
        //系統默認的action,用來打開默認的電話界面
        intent.setAction(Intent.ACTION_CALL);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //需要撥打的號碼
        //intent.setData(Uri.parse("tel:"+telephone));
        context.startActivity(intent);
    }

    /**
     * 打開發送短信界面
     * @param context
     */
    public static void openSMS(Context context){
        Intent intent = new Intent();
        //系統默認的action,用來打開默認的電話界面
        intent.setAction(Intent.ACTION_SENDTO);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //需要發短息的號碼
        //intent.setData(Uri.parse("smsto:"+telephone));
        context.startActivity(intent);
    }

    /**
     * 打開電池狀態信息
     * @param context
     */
    public static void startBatteryStatus(Context context){
        Intent intent = new Intent();
        ComponentName cm = new ComponentName("com.android.settings", "com.android.settings.BatteryInfo");
        intent.setComponent(cm);
        intent.setAction("android.intent.action.VIEW");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * 打開一些設置
     * @param context
     * @param action
     */
    public static void openToolsUI(Context context, String action){
        Intent intent = new Intent();
        ComponentName component = new ComponentName("com.android.settings", action);
        intent.setComponent(component);
        intent.setAction("android.intent.action.VIEW");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * 打開一些設置
     * @param context
     * @param action
     */
    public static void openToolsUI2(Context context, String action){
        Intent intent = new Intent(action);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

}

發佈了41 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章