小编mar*_*lar的帖子

我应该使用带有AlarmManager的PendingIntent.getService()或getBroadcast吗?

我的应用需要在每天的特定时间从网上获取一些数据.所以我使用AlarmManager来安排任务,这是正常的.

但是在查看各种示例时,似乎有两种方法可以处理AlarmManager的待处理意图.

一个用于PendingIntent.getBroadcast()在闹钟响起时呼叫广播接收器,并且在该接收器内部开始执行实际工作的服务.

另一种方法是PendingIntent.getService()在警报响起时直接使用和调用服务.

有人可以向我解释两种方法之间的区别,以便我可以决定依赖哪一种方法吗?

编辑:还有一个问题是在使用getService()时获取唤醒锁定的位置?

例如,当使用BroadcastReceiver时,我在onReceive()中有以下行:

WakeReminderIntentService.acquireStaticLock(context);
Run Code Online (Sandbox Code Playgroud)

如果我直接调用服务,我应该如何获得唤醒锁:

PendingIntent pi = PendingIntent.getService(this, 0, new Intent(this, OnAlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)

我应该简单地从服务中获取它吗?

service android alarmmanager

41
推荐指数
2
解决办法
2万
查看次数

如何使用sed只删除双空行?

我找到了关于如何删除三条空行的问题和答案.但是,我只需要双空行.IE浏览器.应完全删除所有双空行,但应保留单个空白行.

我知道一点sed,但建议的删除三个空行的命令是我的头脑:

sed '1N;N;/^\n\n$/d;P;D'

regex linux sed

25
推荐指数
4
解决办法
1万
查看次数

隐藏Chrome Dev Console中的违规行为

从几个版本开始,Google Chrome已经开始在开发者控制台中显示JS违规.虽然这有时很有用,但更常见的是它只会使控制台变得混乱.

开发控制台中的违规

有没有办法禁用这些违规行为?

另外,从最近开始,开发人员控制台不再具有各种类型的调试输出的复选框.现在您只有日志级别:详细,信息,警告,错误.我发现前一个带复选框的方法更有用 - 是否有某种方式(一个标志?)让它们回来?

javascript google-chrome google-chrome-devtools

25
推荐指数
3
解决办法
6859
查看次数

为什么删除rawQuery需要moveToFirst才能实际删除行?

我一直在努力调试为什么以下删除查询实际上没有删除任何内容,即使完全相同的数据库上的完全相同的查询在Firefox的SQLite管理器中工作正常...

String deleteSql = "DELETE FROM showsummary WHERE url IN (SELECT url FROM showsummary JOIN article_categories USING (url) WHERE categoryid=20 AND title LIKE 'page=%')";
mDb.rawQuery(deleteSql, null);
Run Code Online (Sandbox Code Playgroud)

由于JOIN和子查询都有点复杂,我的想法围绕Android的sqlite实现中关于子查询的一些限制,所以我尝试简化查询.但它仍然没有删除任何东西.

然后我将其更改为选择查询(刚刚用SELECT*替换DELETE)并且这样做有效.所以可能不是连接或子查询毕竟是罪魁祸首.

为了测试select查询,我moveToFirst()在返回的游标中添加了一个:

mDb.rawQuery(deleteSql, null).moveToFirst();
Run Code Online (Sandbox Code Playgroud)

当我后来再次将其更改回删除查询时,我忘记删除 moveToFirst() 它然后它工作了!

它现在很好用,但我很困惑为什么有必要移动光标以实际删除任何东西.这是设计还是错误?

sqlite android

23
推荐指数
2
解决办法
1万
查看次数

Chrome DevTools中的Handled过滤器用于什么?

Chrome的DevTools有几个有用的过滤器来限制日志记录:Errors,Warnings,Info等.

调用最后一个过滤器Handled,我还没有找到用于它的内容.没有console.handle()或类似.谷歌搜索没有提供答案.

为什么以及如何使用Handled过滤器?

javascript console filtering google-chrome-devtools

16
推荐指数
1
解决办法
2566
查看次数

是否可以创建可扩展的列表AlertDialog?

在我的应用程序中,用户可以使用不同的标准选择要下载的文章.其中一个是年月.为此,我想要一个带有年份列表的AlertDialog.如果用户点击一年,该列表将展开并显示1月,2月等.

我知道如何使用SimpleExpandableListAdapter 创建可扩展的列表视图,但这不是我想要的.由于其他标准(例如类别)也列出AlertDialogs,我想要一些外观和感觉相似的东西.

是否有可能完成这样的可扩展列表AlertDialog?

基于CommonsWare的解决方案,这就是我最终的结果:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select something");

ExpandableListView myList = new ExpandableListView(this);
MyExpandableListAdapter myAdapter = new MyExpandableListAdapter();
myList.setAdapter(myAdapter);

builder.setView(myList);
AlertDialog dialog = builder.create();
dialog.show();
Run Code Online (Sandbox Code Playgroud)

仅剩下问题:如何为AlertDialog实现onClick侦听器?通常我会在setItems()方法中执行此操作,但不使用setItems.

我在myList.setAdapter()之后添加了myList.setOnItemClickListener,但它被忽略了.单击某个项目时没有任何反应:

myList.setOnItemClickListener(new ListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        try {
            Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show();
        }
        catch(Exception e) {
            System.out.println("something wrong here    ");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

点击问题的解决方案:

解决方案非常简单.由于它是可扩展列表,因此列表本身会捕获项目单击以打开子元素.因此,永远不会调用事件处理程序.

相反,你必须实现OnChildClickListener() - 顾名思义 - 监听子点击!

android android-alertdialog

13
推荐指数
1
解决办法
6087
查看次数

为什么我的ExpandableListView中的点击被忽略了?

我有一个由ExpandableListView填充的AlertDialog.列表本身运行良好,但由于某些原因,点击被忽略.显然我的点击处理程序永远不会被调用.

这是代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select something");
ExpandableListView myList = new ExpandableListView(this);
MyExpandableListAdapter myAdapter = new MyExpandableListAdapter();
myList.setAdapter(myAdapter);
myList.setOnItemClickListener(new ExpandableListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        try {
            Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show();
        }
        catch(Exception e) {
            System.out.println("something wrong here    ");
        }
    }
});
builder.setView(myList);
dialog = builder.create();
dialog.show();
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用普通列表视图填充AlertDialog,则会生成单击事件而不会出现问题:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Color Mode");

ListView modeList = new ListView(this);
String[] stringArray = new String[] { "Bright Mode", …
Run Code Online (Sandbox Code Playgroud)

android expandablelistview

11
推荐指数
1
解决办法
6420
查看次数

如何才能让我的应用仅针对某些网址出现在意图选择器中?

我正在开发一个可以从某些网页中提取信息的应用程序.我们的想法是,当用户位于浏览器中的特定网址路径中并按下共享按钮时,我的应用将显示在接收方应用列表中.

通过将其添加到清单中,我可以轻松地做到这一点:

<intent-filter android:label="@string/app_name" >
    <action android:name="android.intent.action.SEND" />
    <data android:mimeType="text/plain" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

但是,这将使我的应用程序出现在所有网址的列表中,也是所有那些无关的地方.相反,我希望应用程序只在这些网址中出现在选择器中:

www.example.com/foo/bla.html

www.example.com/foo/bar/blabla.html

但不是从这些:

www.example.com

www.foobar.com

等等.只能在某个主机上的某个路径内.另请注意,当用户点击符合条件的链接时,我不希望启动我的应用.它只应从共享菜单中调用.

所以我的问题是:如何限制我的应用程序出现在意图中仅选择某些网址?

android android-intent

11
推荐指数
1
解决办法
1394
查看次数

Chrome的调试器控制台命令历史存储在哪里?

我经常使用Chrome的调试器控制台来试验javascript代码片段.当我做对了,我通常想将所需的命令复制到我的脚本中,但这里是它变得混乱的地方.对于命令没有过滤器选项,也没有办法调用某些命令(比如在Bash中使用Ctrl-R),因此您需要逐步执行历史记录中的所有命令并逐个复制所需的命令.

相反,我认为应该可以从某个文件或Sqlite数据库中检索命令历史记录.但我找不到它.

所以我的问题是:Chrome的调试器控制台命令历史存储在哪里?

javascript google-chrome javascript-debugger

9
推荐指数
2
解决办法
2423
查看次数

Lastpass如何知道Chrome中的当前网址

在Chrome for Android中浏览时,如果将URL识别为与您关联的登录详细信息,则Lastpass会弹出建议.

它如何知道Chrome正在查看哪个网址?我知道Lastpass使用了辅助功能服务,但我想知道它是如何从Chrome查询当前网址的.

PS.显然它只适用于Chrome(例如,它不会在Opera中弹出),所以它可能是Chrome特有的.

android google-chrome lastpass

6
推荐指数
1
解决办法
569
查看次数