Tuesday, October 18, 2016

default clock packages including Marshmallow to open Alarm in android

String clockImpls[][] = {
        {"Sony Ericsson Xperia Z", "com.sonyericsson.organizer", "com.sonyericsson.organizer.Organizer_WorldClock"},
        {"ASUS Alarm Clock", "com.asus.alarmclock", "com.asus.alarmclock.AlarmClock"},
        {"ASUS Desk Clock", "com.asus.deskclock", "com.asus.deskclock.DeskClock"},
        {"Sony Alarm", "com.sonyericsson.alarm", "com.sonyericsson.alarm.Alarm"},
        {"Standard Alarm", "com.android.alarmclock", "com.android.alarmclock.AlarmClock"},
        {"Marshmallow Alarm", "com.android.deskclock", "com.android.deskclock.DeskClock"},
        {"HTC Alarm ClockDT", "com.htc.android.worldclock", "com.htc.android.worldclock.WorldClockTabControl"},
        {"Standard Alarm ClockDT", "com.android.deskclock", "com.android.deskclock.AlarmClock"},
        {"Froyo Nexus Alarm ClockDT", "com.google.android.deskclock", "com.android.deskclock.DeskClock"},
        {"Moto Blur Alarm ClockDT", "com.motorola.blur.alarmclock", "com.motorola.blur.alarmclock.AlarmClock"},
        {"Samsung Galaxy S", "com.sec.android.app.clockpackage", "com.sec.android.app.clockpackage.ClockPackage"}};

Full Code for clock widget


import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Log;
import android.widget.RemoteViews;

public class ClockWidget extends AppWidgetProvider {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        PendingIntent pendingIntent;
        if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {

            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.layout.clock_widget);

            try {
                pendingIntent = PendingIntent.getActivity(context, 0, getAlarmPackage(context), 0);
                views.setOnClickPendingIntent(R.id.clock, pendingIntent);
            } catch (Exception e) {
                Log.e("pendingExceptions", e.getMessage() + " " + getAlarmPackage(context));
            }

            AppWidgetManager
                    .getInstance(context)
                    .updateAppWidget(
                            intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS),
                            views);
        }
    }

    public Intent getAlarmPackage(Context context) {
        PackageManager packageManager = context.getPackageManager();
        Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);

        String clockImpls[][] = {
                {"Sony Ericsson Xperia Z", "com.sonyericsson.organizer", "com.sonyericsson.organizer.Organizer_WorldClock"},
                {"ASUS Alarm Clock", "com.asus.alarmclock", "com.asus.alarmclock.AlarmClock"},
                {"ASUS Desk Clock", "com.asus.deskclock", "com.asus.deskclock.DeskClock"},
                {"Sony Alarm", "com.sonyericsson.alarm", "com.sonyericsson.alarm.Alarm"},
                {"Standard Alarm", "com.android.alarmclock", "com.android.alarmclock.AlarmClock"},
                {"Marshmallow Alarm", "com.android.deskclock", "com.android.deskclock.DeskClock"},
                {"HTC Alarm ClockDT", "com.htc.android.worldclock", "com.htc.android.worldclock.WorldClockTabControl"},
                {"Standard Alarm ClockDT", "com.android.deskclock", "com.android.deskclock.AlarmClock"},
                {"Froyo Nexus Alarm ClockDT", "com.google.android.deskclock", "com.android.deskclock.DeskClock"},
                {"Moto Blur Alarm ClockDT", "com.motorola.blur.alarmclock", "com.motorola.blur.alarmclock.AlarmClock"},
                {"Samsung Galaxy S", "com.sec.android.app.clockpackage", "com.sec.android.app.clockpackage.ClockPackage"}};

        boolean foundClockImpl = false;

        for (String[] clockImpl : clockImpls) {
            String packageName = clockImpl[1];
            String className = clockImpl[2];
            try {
                ComponentName cn = new ComponentName(packageName, className);
                packageManager.getActivityInfo(cn, PackageManager.GET_META_DATA);
                AlarmClockIntent.setComponent(cn);
                foundClockImpl = true;
            } catch (NameNotFoundException ignored) {
            }
        }
        if (foundClockImpl) {
            return AlarmClockIntent;
        } else {
            return null;
        }
    }
}