我有一个应用程序,允许用户在不同的时间设置警报.目前,它使用AlarmManager加上BroadcastReceiver和AlertDialog来提醒用户警报响起.
我想知道我的应用程序是否可以使用内置闹钟.我知道我可以安排这样的警报:
Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
i.putExtra(AlarmClock.EXTRA_HOUR, new Date(alarm.getTime()).getHours());
i.putExtra(AlarmClock.EXTRA_MINUTES, new Date(alarm.getTime()).getMinutes());
i.putExtra(AlarmClock.EXTRA_MINUTES, alarm.getDescription());
i.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
context.startActivity(i);
Run Code Online (Sandbox Code Playgroud)
但这提出了两个问题:
作为第1项的工作,我可以使用AlarmManager来安排用户警报在24小时内设置.然而,这让我得到了第2项 - 理想情况下我需要一种方法来在Android闹钟执行后从Android闹钟中删除我的应用程序警报(以避免我的应用程序的警报占用警报空间)但是找不到一个可以获得警报警报列表并删除一个.
这是可能的,还是我需要坚持手动AlarmManager/AlertDialog方法?
我有一个提醒应用程序,它将发送短信通知用户他们的提醒时间已经过去.这很好用.但是,我一直在测试当手机睡着并错过提醒时会发生什么.
我正在AlarmManager设置警报以对应提醒时间.我的日志记录显示,当手机重新启动并且发送短信的尝试发生时,闹钟响起,但从未收到短信.
所以问题是,有没有办法调试为什么不发送短信?
我的当前代码在发生警报事件时设置ContentObserver:
private void registerToListenForSentSMS()
{
MessageSentListener smsObeserver = new MessageSentListener(new Handler());
ContentResolver contentResolver = TheEveryOtherAlarmAppApplication.getAppContext().getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver);
}
Run Code Online (Sandbox Code Playgroud)
MessageSentListener收到一些 SMS事件发生的通知:
public class MessageSentListener extends ContentObserver
{
public MessageSentListener(Handler handler)
{
super(handler);
}
@Override
public void onChange(boolean selfChange)
{
super.onChange(selfChange);
Log.d(Constants.ALARM_APP_LOG_TAG, "Something happend");
ContentResolver contentResolver = AlarmAppApplication.getAppContext().getContentResolver();
contentResolver.unregisterContentObserver(this);
}
}
Run Code Online (Sandbox Code Playgroud)
但这可能是由与我的应用程序无关的SMS事件引起的.无论如何,它并没有真正让我更接近解决方案 - 我想知道什么时候出现什么问题!
如果没有发送警报短信,我可以重新发送或使用其他一些通知方法,如电子邮件等.
我在应用商店中发布了一个应用.其描述包括指向网页的链接.但是,它不是可点击的,只是常规文本.
iTunes连接(开发人员控制台)上没有预览选项,因此无法在说明中使用html进行测试.
那么,是否可以使用html或其他标记在应用商店中创建"实时"链接?
我想知道是否有人可以给我一个Android游标的简要概述.几个具体问题:
1 - 我有一个在数据库查询后返回游标的方法:
public static Cursor getVehicles()
{
SQLiteDatabase db = vehicleData.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, GET_VEHICLES_FROM_CLAUSE, null, null, null, null, ORDER_BY);
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
为了做家务,我在return语句之前尝试了db.close().但是,这会导致返回的游标不包含任何行.为什么是这样?
2 - 关闭游标和关闭数据库有什么区别?
3 - 如果它是一个局部变量,我是否需要在Cursor上调用close,还是可以将它留给垃圾收集器进行清理?
4 - 我的数据库很小,仅供我的应用程序使用 - 我可以保持打开状态吗?
正如标题所示,我有兴趣了解Android对已从设备中删除的应用程序创建的PendingIntents所做的事情.
到目前为止,我的研究涉及使用AlarmManager和待定意图设置警报.在正常情况下,所有工作都按预期工作.为了测试卸载情况,我使用AlarmManager和PendingIntent为将来的某个点设置了警报,然后删除了应用程序.我观察到的是,似乎没有任何事情发生 - 例如,logcat没有显示我的PendingIntent试图启动使用缺少的类的错误.
我找不到关于此的文档,所以想知道是否有人知道这个或我可以参考的链接.
我最近问了一个关于检查发送短信状态的问题,给出的答案是一个代码片段,注册了两个"匿名内部"(如果不正确,请更正我的术语)BroadcastReceivers来收听短信发送/传送的广播.这些接收器只需要接收有关我的应用程序刚刚发送的SMS的数据,因此不需要永久收听.
我的直接想法是"好吧,我完成后我需要取消注册",但这是正确的吗?我问海报,因为他没有包含任何未注册的代码,但没有得到回复.代码似乎是一种非常标准的方式来做我想要的,因为它出现在许多Android开发网站上.这里是:
//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS sent",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service", …Run Code Online (Sandbox Code Playgroud) 谁能告诉我如何在Android 1.6中声明一个包含autoincrement _id列的复合主键?我不确定语法.当我尝试添加值时,我最终只是在Java中执行它(其中registrationNumber + date必须在表中是唯一的):
Cursor fuelUpsCursor = getFuelUps(registrationNumber, date);
if(!fuelUpsCursor.moveToNext())
{
//add registrationNumber and date
}
Run Code Online (Sandbox Code Playgroud)
我真的不需要_id列,但如果没有表,它会让生活变得棘手.
干杯,巴里
我正在尝试在about框中添加一个Twitter个人资料的链接."常规"链接(如电子邮件地址和网址)由处理
android:autoLink="email|web"
Run Code Online (Sandbox Code Playgroud)
在about.xml中,但对于Twitter个人资料页面,我需要在strings.xml中使用html代码.我试过了:
<string name="twitter">Follow us on <a href=\"http://www.twitter.com/mytwitterprofile">Twitter: @mytwitterprofile</a></string>
Run Code Online (Sandbox Code Playgroud)
在about框上呈现html标记.
我也尝试过:
<string name="twitter">Follow us on <a href="http://www.twitter.com/mytwitterprofile">Twitter: @mytwitterprofile</a></string>
Run Code Online (Sandbox Code Playgroud)
它显示文本"在Twitter上关注我们:@mytwitterprofile",但它不是超链接.
我该怎么做这个看似简单的任务!?
干杯,巴里
我有一个接收广播的应用程序AlarmManager.在此之后,它启动一个透明Activity(AlarmAlertDialogActivity)然后显示一个AlertDialog.AlertDialog在呼叫中单击取消结果finish().
由于AlarmAlertDialogActivity它不是从另一个发射,Activity而是一个广播接收器,它是用它发射的
Intent.FLAG_ACTIVITY_NEW_TASK
Run Code Online (Sandbox Code Playgroud)
这意味着Activity将在新任务中启动.
我的问题是,当应用程序在取消之后从最近的历史中重新启动AlertDialog(即通过按住主页按钮并单击应用程序的图标),AlertDialog将重新启动.我希望通过使用finish()/ Intentflags我可以避免这种情况; 我想要发生的是在要启动的父活动Activity之前的最后一次AlertDialog.
我Intent.FLAG_ACTIVITY_NO_HISTORY在启动时尝试使用bitmasking 作为附加标志,AlarmAlertDialogActivity但这似乎没有任何区别.
Bitmasking Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS有效,但只能从最近的历史中删除应用程序(顾名思义).这对用户体验不利.
那么,是否有可能获得我正在寻找的UI流程?
更新 - 根据要求提供更多信息:
来自Broadcast接收器的Logcat,AlertDialog活动和我的主要活动:
05-30 10:36:00.132: D/everyOtherApp(362): Received alarm broadcast at: Wed May 30 10:36:00 GMT+00:00 2012
05-30 10:36:00.262: D/everyOtherApp(362): AlarmAlertDialogActivity.onCreate()
05-30 10:36:00.912: D/everyOtherApp(362): AlarmAlertDialogActivity.onResume()
05-30 10:36:12.461: D/everyOtherApp(362): Cancel pressed
//Cancel exits the activity. I now relaunch the …Run Code Online (Sandbox Code Playgroud) 我有一个GroupDataModel项目,并使用它来填充一个ListView.每个项目都有一个类别,可以是"电视"或"电影".我将"category"设置为排序键,并ListView显示按类别分组的项目.
但是,类别的顺序是"电影",然后是"电视".我需要他们按照其他顺序:"电视"然后"电影".
这可能吗?
码:
GroupDataModel* results = new GroupDataModel();
results->setGrouping(ItemGrouping::ByFullValue);
QStringList sortingKeys;
sortingKeys.append("category");
results->setSortingKeys(sortingKeys);
Run Code Online (Sandbox Code Playgroud)