Android小部件如何从中获取小时和分钟的时间?

Posted

技术标签:

【中文标题】Android小部件如何从中获取小时和分钟的时间?【英文标题】:Android widget how can get time in hour and minute from this? 【发布时间】:2013-04-26 09:46:11 【问题描述】:

在我的应用程序中,我创建了小部件以模拟时钟格式显示时间。当点击实际显示警报类的小部件来设置该小部件的警报时,它也可以正常工作。

为此,我使用了以下代码:

当点击小部件时,我在更新中调用它并从中获取警报类:

PendingIntent pendingIntent = PendingIntent.getActivity(
    context, 0, getAlarmPackage(context), 0);
rv_ana.setOnClickPendingIntent(R.id.clock, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, rv_ana);

及报警功能方法:

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

    String clockImpls[][] = 
             "Standard Alarm", "com.android.alarmclock",
                    "com.android.alarmclock.AlarmClock" ,
             "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 (int i = 0; i < clockImpls.length; i++) 
        String packageName = clockImpls[i][1];
        String className = clockImpls[i][2];
        try 
            ComponentName cn = new ComponentName(packageName, className);
            packageManager.getActivityInfo(
                        cn, PackageManager.GET_META_DATA);
            AlarmClockIntent.setComponent(cn);    
            foundClockImpl = true;
         catch (NameNotFoundException nf) 
        
    
    if (foundClockImpl) 
        return AlarmClockIntent;
     else 
        return null;
    

但是我的要求是从这个闹钟功能中我如何才能得到小时的时间和分钟的时间。实际上该功能会自动显示警报,但我想知道时间。 有没有可能?帮帮我?

【问题讨论】:

看了两遍你的问题,还是不知道你想要什么。如果想知道当前时间,可以使用Calendar.getInstance().get(Calendar.HOUR_OF_DAY)等。 所以您希望闹钟时间从闹钟应用程序返回到您的小部件? 我也读了很多次这个问题,我不清楚你想要什么。您希望您发布的代码能够访问实际时间,还是小部件上显示的时间?还是 Intent 发起的 MAIN? 确实令人困惑。不过,他得到了 3 个赞成票...... :) 我不想要日历上的时间。你知道如何从操作系统支持的包中设置警报,如上所示。在上述情况下,我们必须通过设置根据我的代码直接将警报设置为小部件。但我想从那节课上抽出时间。 【参考方案1】:

如果你想要闹钟时间,你可以使用这个。

String nextAlarm = Settings.System.getString(getContentResolver(),
Settings.System.NEXT_ALARM_FORMATTED);

然后将其转换为日期。

String string = nextAlarm;//Tue 8:30"
Date date = new SimpleDateFormat("EEE HH:mm", Locale.ENGLISH).parse(string);
System.out.println(date);

【讨论】:

上面发布的代码和我一样,也适用于我。因为当我们设置警报时,它工作正常。我们如何从上面的代码中获取小时和分钟的时间。 No.. 实际上我们设置了一个警报时间,我想通过编程。 闹钟时间或闹钟时间。 以小时和分钟为单位的警报时间 让我们continue this discussion in chat【参考方案2】:

这个问题对我来说不是很清楚。假设您需要从闹钟中获取闹钟时间小时和分钟。

final String tag_alarm = "tag_alarm";
Uri uri = Uri.parse("content://com.android.alarmclock/alarm");
Cursor c = getContentResolver().query(uri, null, null, null, null);
Log.i(tag_alarm, "no of records are " + c.getCount());
Log.i(tag_alarm, "no of columns are " + c.getColumnCount());
if (c != null) 
    String names[] = c.getColumnNames();
    for (String temp : names) 
        System.out.println(temp);
    
    if (c.moveToFirst()) 
        do 
            for (int j = 0; j < c.getColumnCount(); j++) 
                Log.i(tag_alarm, c.getColumnName(j)
                        + " which has value " + c.getString(j));
            
         while (c.moveToNext());
    

【讨论】:

以上代码在函数中调用,在 c.getCount() 处显示空指针异常;

以上是关于Android小部件如何从中获取小时和分钟的时间?的主要内容,如果未能解决你的问题,请参考以下文章

电池高效的 android 小部件,每分钟更新一次

如何每分钟更新一个 Android 应用小部件

Flutter:显示天、小时、分钟和秒的倒计时小部件

Android 应用小部件未更新

如何在我的网站上向 Google 地图小部件添加用户输入标记,并从中获取纬度和经度数据?

带有 AlarmManager 和配置的 Android 小部件