提醒用户注意时间敏感事件

时间:2013-04-04 18:27:07

标签: android user-interface alarmmanager android-notifications

首先让我在这篇文章前言,说我不是一个普通的Android用户。我们的产品适用于iOS和Android,我在iOS方面拥有更多经验。我正在寻找关于功能的适当“Android体验”以及如何实现它的建议。

我们有一个应用程序,向用户呈现一整天都会发生的一些“事件”。用户可以在一个或多个事件发生前几分钟要求通知。我需要就如何向用户呈现这些通知提出建议。

我想我了解如何在事件即将发生时使用AlertManager通知Activity或BroadcastReceiver。问题是接下来会发生什么。

然后我们可以使用Android的通知系统(使用NotificationCompat.Builder)向系统输入通知。这个问题是我觉得它太微妙了。这些是时间敏感的事件,当发生这种情况时,用户需要将注意力吸引到设备上。

另一种可能性是在事件即将发生时向用户显示警报对话框(可能还有声音)。当我们的应用程序在前台时,我有这个工作。但是,当应用程序处于后台(或可能已停止)时,我最好将警报置于现有活动的任何活动上。这似乎不正常。相反,我的应用程序的主要活动似乎被带到了前面,然后警报活动显示在此之上,但是背景为黑色(尽管我使用透明主题进行警报活动)。

以下是一些代码:

private void createAlarm( )
{
    Intent intent = new Intent( getApplicationContext(), AlarmDisplayer.class );
    PendingIntent pendingIntent = PendingIntent.getActivity( getApplicationContext(), 3333, intent, 0 );

    //getting current time and add 5 seconds in it
    Calendar cal = Calendar.getInstance();
    cal.add( Calendar.SECOND, 10 );
    //registering our pending intent with alarmmanager
    AlarmManager alarmMgr = (AlarmManager) getSystemService( ALARM_SERVICE );
    alarmMgr.set( AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent );
}


public class AlarmDisplayer extends Activity implements OnClickListener
{
    @Override
    protected void onCreate( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );

        AlertDialog.Builder builder = new AlertDialog.Builder( this );
        builder.setMessage( "Alert received xxx" );
        builder.setNeutralButton( "OK", this );
        AlertDialog dialog = builder.create();
        dialog.show();
    }

    public void onClick( DialogInterface dialog, int which )
    {
        this.finish();
    }
}

来自清单:

    <activity
        android:name="com.southernstars.skysafari.AlarmDisplayer"
        android:theme="@style/Theme.Transparent"
        android:configChanges="orientation"
        android:label="" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

或许我们应该在Android上采用其他方式。一个型号可能是时钟应用程序中的警报。当闹钟响起时,整个屏幕将被闹钟接管。这可能有点沉重,但这是可能的。

对我们应该做什么以及如何做的任何想法?

比尔

3 个答案:

答案 0 :(得分:0)

我会通过显示一个对话框(这样你不会完全阻止用户视图,而只是一个需要立即关注的消息)来实现这一点。理想情况下,对话框应填充当前警报的相应信息,即将关闭。基本上,当计时器关闭时,向广播接收器发送消息,然后显示对话框。您的对话框应该有2个按钮:

  1. 转到您的主要活动以显示更多信息
  2. 暂停/忽略/取消。
  3. 另外要确保您收到消息...将广播接收器设置为以编程方式注册, NOT 以编程方式注册。

答案 1 :(得分:0)

我会选择通知系统并使用文字转语音提醒用户有新事件,他们可以从通知栏中获取更多详细信息。

答案 2 :(得分:0)

我认为您可以将AlertDialog与属于控制广播的服务的Context一起使用。这在建筑视图中也许是干净的。