小编Cat*_*san的帖子

Android 6.0如果该SSID已经有另一个WifiConfiguration,则无法添加WifiConfiguration

Android 6.0对WiFi行为进行了一些更改,它破坏了我的应用行为,无法找到解决方案.

基本上,对于Android 6.0,您不得修改或删除非应用程序创建的WifiConfiguration对象.这意味着我需要始终创建自己的WifiConfiguration对象.但是,如果用户或其他应用程序已经为特定AP创建了WifiConfiguration,则无法为该AP创建另一个AP.

wifiManager.addNetwork(wifiConfiguration)返回-1.这适用于所有以前的Android版本,但不适用于Android 6.0

所以我被困住了.这是Android的错误吗?我想如果他们为具有自己的WiFi接入点的自定义硬件开发应用程序,很多开发人员应该受此影响.

android wifi android-wifi android-6.0-marshmallow

9
推荐指数
1
解决办法
1990
查看次数

在URL中使用带有非法字符的HttpGet

我正在尝试使用DefaultHttpClient并向HttpGetWeb服务发出请求.遗憾的是,Web服务URL包含非法字符,例如{(例如:domain.com/service/{username}).很明显,Web服务命名不是很好,但我无法改变它.

当我这样做时HttpGet(url),我知道我在网址中有一个非法字符(即{和}).如果我在此之前对URL进行编码,则没有错误,但请求会转到不同的URL.

网址虽然有非法字符,但可以在浏览器中使用,但HttpGet实现不允许我使用它.我应该做什么或使用什么来避免这个问题?

java http http-get httpclient httpwebrequest

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

一般应用程序设计(IntentService/ContentProvider/AsyncTask)

我正在试图弄清楚什么是访问多个Web服务的应用程序的最佳通用设计,并且具有显示信息的多个活动.

我实现最新Android应用程序的方式如下.我有一个IntentService接收来自活动的请求以从Web服务获取信息.我Service通过ResultReceiver关于请求的状态(已启动/错误/已完成)通知活动.在调用Web服务,获取结果(xml/json)并解析它之后,我将该信息放入ContentProvider(由sqlite数据库备份)并使用a ContentResolver来通知任何有关更改的活动.活动会收到有关更改的通知(一些使用ContentObserver和其他使用SimpleCursorAdapters并自动通知).

现在,我的方法存在问题:

  • 每次我输入活动时,我都会通过上述方法从Web服务请求信息,并删除该特定表中的所有行,填入新信息并通知活动.因此,如果用户按下然后再次进入,我再次完成整个舞蹈.我想我应该在数据库中添加一些字段,以确定最后更新的时间等等,但我不知道如何继续进行.建议?我认为一种替代方案是使用警报并以特定间隔触发更新.但在我的情况下,规范要求每次进入活动时检查Web服务.
  • 当我调用Web服务时,我在活动中显示一个不确定的进度条,而不是其他视图(其中包含先前获取的信息,并且位于数据库中直到Web服务调用完成)但是用户可以开始与视图交互这不好(信息可能会从数据库中消失).有什么方法可以禁用交互?想到了ProgressDialog.
  • 如果我快速完成不同的活动,IntentService会被先前的Web服务调用阻止,并且需要更长时间才能进入我的最新Web服务调用.我可以IntentService为每个Web服务创建多个,但我不认为这是它的目的.

我觉得我采用的方法对于这个特定的应用来说并不是最好的方法.它部分受到Google I/O应用程序的启发(我无法理解所有内容,例如更新的sqlite字段等).一种替代方法是在所有活动中使用AsyncTasks.但是,我可以在哪里存储信息以便从其他活动中访问?在列表中Application?id管理怎么样?

我真的对您的意见/想法/建议感兴趣,如何让我的下一个应用程序更好,更有效地工作.

sqlite android

8
推荐指数
1
解决办法
3842
查看次数

从HOME按钮返回后,onLoadFinished未调用

使用自定义AsyncTaskLoader从Web服务下载数据时,如果我在加载过程中按HOME按钮然后再次进入应用程序,则不会调用onLoadFinished()方法.我的片段正在调用setRetainInstance(true),onActivityCreated()它也getLoaderManager.initLoader(0, null, this)使用相同的方法调用(如建议的那样).

在测试时,我看到当回到片段时onActivityCreated()没有被调用,所以这可能是为什么onLoadFinished()不调用.但是在哪里放这个initLoader()方法呢?我在几个地方读到它不应该被调用onResume().

那么,有什么想法吗?在我的应用程序中,我在各种屏幕中有很多加载器,我需要以优雅的方式解决这个问题.

android fragment

8
推荐指数
1
解决办法
9034
查看次数

检测OpenGl ES 2.0是否可用

我正在为API级别创建一个Android应用程序> = 7.一个屏幕通过ndk使用带有OpenGL ES 2.0的GLSurfaceView.如何检测opengl 2.0是否可用?我不能android:glEsVersion="0x00020000"在我的AndroidManifest.xml中使用,因为我必须支持API级别> = 7的所有手机.如果不支持2.0,我将显示静态屏幕.

我正在使用ndk附带的hello-gl2示例应用程序中的类似代码.在GL2JNIView中,当它设置Opengl上下文时,如果它没有找到合适的opengl配置(在我的情况下是一个需要opengl es 2.0的配置),它会抛出一个IllegalArgumentException("No configs match configSpec")并且应用程序崩溃.我找不到拦截该异常并在该屏幕上执行其他操作的方法.有任何想法吗?

android opengl-es-2.0

7
推荐指数
2
解决办法
6690
查看次数

活动从活动堆栈顶部打开的通知开始

我有一个有多个活动的应用程序.在其中一个,我设置了一个警报.我按下HOME按钮.触发警报时,会显示通知.点击通知时,我开始一个类似对话的活动(@android:style/Theme.Dialog).虽然我在桌面屏幕上,Android会打开我的上一个活动,然后在此基础上显示我的对话式活动.我只想在用户所在的任何地方展示我的对话活动.

有谁知道出了什么问题?

Intent notificationIntent = new Intent(this, NotificationActivity.class);
notificationIntent.putExtra(Constants.EXTRA_ALERT_MESSAGE, contentText);
PendingIntent contentIntent = PendingIntent.getActivity(this, Constants.PENDING_INTENT_REQ_DIALOG, notificationIntent, 0);
no.contentIntent = contentIntent;
Run Code Online (Sandbox Code Playgroud)

notifications android android-activity

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

从onLoadFinished()中的游标填充小部件

我想知道如何使用它CursorLoader来填充屏幕上的小部件.在线的所有示例仅用于使用适配器,这非常有用.我需要的是一种可靠的方法来从Cursor和UI线程更新我的屏幕中的视图,而不会因为StaleDataException或者光标被突然停用而崩溃.这是我目前的方法,但我仍然收到用户的一些崩溃报告.

@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
        CursorLoader loader = null;

        switch (id) {
            case LOADER_ID_DATA:
                loader = new CursorLoader(...);
                break;
        }

        return loader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, final Cursor cursor) {
        handler.post(new Runnable() {

            @Override
            public void run() {
                if (getActivity() == null)
                    return;

                updateView(cursor);
            }
        });
    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
    }
Run Code Online (Sandbox Code Playgroud)

一种解决方案是直接在onLoadFinished中检索所有光标字段,并将它们全部传递给处理程序以填充UI线程上的窗口小部件.但这很难看,因为我可能在光标中有很多值.我很想找到一种可靠的无碰撞方式来处理这一切.

android android-cursorloader

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

仅在WIFI上使用SyncAdapter

我想SyncAdapter在Wifi上运行我的唯一功能.在开始时onPerformSync,我可以检查是否存在wifi.如果不是,我想推迟它,直到有WIFI可用.

我知道,syncresult.delayUntil但这意味着同步适配器每隔x分钟无用地调用,尽管可以禁用wifi,例如整天.此外,delayUntil如果您triggerSync直接使用,我所阅读的内容并不适用.

这里最好的方法是什么?像Evernote这样的应用似乎只能在WIFI上同步这个选项.

android sync

5
推荐指数
1
解决办法
1014
查看次数

测试时卸载应用程序

我是使用Robotium在Android上测试的新手.在运行某些测试之前,我如何以编程方式卸载然后安装应用程序?

例如,为了让我测试登录活动,我需要确保不会从先前运行的应用程序中保存登录凭据.或者还有另一种方法吗?

android functional-testing robotium

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

Jackson反序列化自定义布尔json属性

我想反序列化一些JSON中的布尔值.问题是这些值可以是null,true,false,"true",false,"Y"或"N".

我已经创建了自己的布尔反序列化器

public class CustomBooleanDeserializer extends JsonDeserializer<Boolean> {

    final protected Class<?> _valueClass = Boolean.class;

    @Override
    public Boolean deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
            JsonProcessingException {
        return _parseBooleanPrimitive2(jp, ctxt);
    }

    protected final boolean _parseBooleanPrimitive2(JsonParser jp, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {
        LogUtils.d("PARSE BOOLEAN");
        JsonToken t = jp.getCurrentToken();
        if (t == JsonToken.VALUE_TRUE) {
            return true;
        }
        if (t == JsonToken.VALUE_FALSE) {
            return false;
        }
        if (t == JsonToken.VALUE_NULL) {
            return false;
        }
        if (t == JsonToken.VALUE_NUMBER_INT) {
            return (jp.getIntValue() != 0);
        } …
Run Code Online (Sandbox Code Playgroud)

json boolean jackson

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

触发系统音量条

是否可以通过按我的按钮来Activity显示音量栏?音量条是当您按下硬件音量按钮之一时出现的视图。

是否有 API 函数可以执行此操作,或者我是否必须手动重新创建该视图?

android volume

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