标签: android-background

从后台任务或服务确定当前前台应用程序

我希望有一个在后台运行的应用程序,它知道任何内置应用程序(消息,联系人等)何时运行.

所以我的问题是:

  1. 我应该如何在后台运行我的应用程序.

  2. 我的后台应用程序如何知道前台运行的应用程序是什么.

有经验的人的回应将不胜感激.

android android-service android-background

107
推荐指数
8
解决办法
10万
查看次数

缩放图像保持其纵横比在背景中可绘制

如何使背景图像适合视图,但在<bitmap />用作背景可绘制XML 时保持其纵横比?没有<bitmap>android:gravity值给出预期效果的.

scaling android android-drawable android-background android-bitmap

58
推荐指数
3
解决办法
8万
查看次数

Android:弹出键盘上的背景图片大小调整

我正在开发一个应用程序,其中背景图像在键盘弹出窗口缩小.我的.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            /**
              Other stuff 
            */

        </RelativeLayout>
    </ScrollView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我在Google上搜索并发现,要添加

android:windowSoftInputMode="stateVisible|adjustPan"
Run Code Online (Sandbox Code Playgroud)

在我的清单文件中.但它没用.

编辑:

键盘弹出前我的布局如下:

图片1

弹出后像:

图2

请检查背景图像的差异.在图像1中,图像的大小和图像2的背景图像缩小.我需要在键盘弹出窗口向上移动页脚和背景.

我错过了什么或做错了请建议我.

android android-layout android-scrollview android-background

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

默认情况下,在"Asus auto start manager"中设置"允许"权限

我有一个需要在后台运行的应用程序,所以我正在使用WakeFullService.但是在Asus Zenfone中它不起作用,因为Auto start manager不允许该应用程序运行.我的期望是:

  1. 在我们的应用安装期间或应用开放时在自动启动管理器中设置"允许权限".

  2. 华硕自动启动管理器是否有任何API可以帮助我检查我的应用程序的权限状态,以便我可以通过正常文本警报通知用户打开权限.

performance android android-service android-background android-intentservice

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

SearchView删除蓝色焦点线并在某个位置显示光标

我一直在尝试删除SearchView中的蓝色焦点线.我将它投射到AutoCompleteTextView,以便我可以为searchView使用自定义图标.

    int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    searchtextView = (AutoCompleteTextView) searchView.findViewById(id); 
Run Code Online (Sandbox Code Playgroud)

我试过用

searchtextView.setBackGroundColor(0) 
Run Code Online (Sandbox Code Playgroud)

并在我的xml中手动将背景设置为#0000000,但我仍然可以看到底部的蓝线.

我面临的第二个问题是光标最初没有显示在文本上.我想在searchview中没有输入任何内容时显示光标.我试图通过编程方式进行操作

if (searchtextView.getText().toString().length() >= 0) {
   searchtextView.setSelection(searchtextView.getText().toString().length());
 }
Run Code Online (Sandbox Code Playgroud)

即使在searchView内部没有文本也应该显示光标.我认为它与焦点有关,因为当我输入2-3个字符时,光标会自动显示.

android focus autocompletetextview searchview android-background

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

后台执行不允许接收意图BOOT_COMPLETED

我已经阅读了有关Android Oreo背景执行限制的内容,并且明确指出BOOT_COMPLETED广播不会受到影响,但我无法让它在Android Oreo上运行.

首先,我正在编译SDK 27.其次,我在清单文件中声明了接收器:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <receiver
        android:name="helpers.StartDetectionAtBoot"
        android:label="StartDetectionAtBoot"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>

            <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>

            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <!--For HTC devices-->
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
            <!--For MIUI devices-->
            <action android:name="android.intent.action.REBOOT"/>
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

然后就是接收器的实现,它也可以很简单:

public class StartDetectionAtBoot extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("test", "test");

        Intent intent0 = new Intent( context, ActivityRecognitionService.class );
        PendingIntent pendingIntent = PendingIntent.getService(context, 111, intent0, PendingIntent.FLAG_UPDATE_CURRENT);
        ActivityRecognitionClient activityRecognitionClient = ActivityRecognition.getClient(context);
        activityRecognitionClient.requestActivityUpdates(5000, pendingIntent);
    }
}
Run Code Online (Sandbox Code Playgroud)

onReceive 方法未被调用,我将永远在Android Oreo设备/模拟器上获得logcat错误:

W/BroadcastQueue:不允许后台执行:接收Intent {act …

android broadcastreceiver android-background android-8.0-oreo

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

从新的Context绑定服务以进行配置更改或从应用程序上下文绑定?

我正在努力研究绑定服务是否适合在我的应用程序中进行后台工作.要求是各种应用程序组件可以通过它以不同的优先级发出Web请求.(因此,服务必须保持某种队列,并能够取消它对其他更高优先级的持续请求).我希望该服务对用户来说相对不显眼,以至于他们在完成应用程序后没有发现它正在运行 - 如果我想做一些更重要的事情,那么在应用程序关闭时我会继续使用startForeground( )在此过程中发送通知.

解决方案第一个:从活动绑定

因此,对于给定的应用程序组件,它应该能够绑定到服务以完成工作.但似乎存在一个众所周知的问题,即如果活动正在进行绑定,则在配置更改(旋转)期间绑定将丢失,因为活动将被关闭.

所以,我在想我可以使用另一个我创建的上下文(new Context())并从中绑定到服务,然后使用非UI片段来维护这个上下文的配置更改,直到我认为我已完成它.我只能在配置更改期间执行此操作,或者作为绑定活动的永久替代方法.(我应该指出,这是在配置更改中维护实例的标准和推荐方法)

解决方案数字2:

我看到的主要替代方案是我可以使用应用程序上下文来进行绑定 - 但这可能会持续太长时间吗?和/或应用程序上下文和服务之间是否存在某种循环关系,从而阻止服务和应用程序上下文被破坏?

问题:

所以我试图回答自己的问题是:我应该使用第一种方法(具有临时上下文的活动)吗?或者第二个(只是绑定服务到应用程序上下文)?

我是否正确认为应用程序上下文可以多次绑定到服务,然后从中取消绑定相同的次数?(即你可以有多个有效的绑定PER上下文)?

可以new Context()在第一个解决方案中使用我自己的context()会导致任何问题吗?

编辑

找到了更多信息:https://groups.google.com/forum/#!topic/android-Developers/Nb58dOQ8Xfw

似乎很难"任意"创建一个上下文,因此解决方案1和2的组合似乎是合适的,其中跨配置的服务连接保持变化,但绑定是应用程序上下文.我仍然担心从应用程序上下文解除绑定两次的可能性.保持绑定的计数本身似乎是不必要的 - 任何人都可以确认/否认绑定是每个连接而不是每个上下文?

java android android-service android-background android-service-binding

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

使用HttpsURLConnection忽略ssl证书的方法

我使用两种方法尝试使用HTTPS URL:

具有正确值的旧的已弃用和返回响应.

这是代码,它不需要忽略ssl证书它自己忽略它或可能使用其他技术:

  public String newApiPost(String url,String p1,String p2,String p3){

    HttpClient httpClient = new DefaultHttpClient();
    // replace with your url
    HttpPost httpPost = new HttpPost(url);

    //Post Data
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>
    ();
    nameValuePair.add(new BasicNameValuePair("cliend_id",p1));
    nameValuePair.add(new BasicNameValuePair("client_secret", p2));
    nameValuePair.add(new BasicNameValuePair("key",p3));


    //Encoding POST data
    try {
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
     } catch (UnsupportedEncodingException e) {
        // log exception
        e.printStackTrace();
    }

    //making POST request.
    try {
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity httpEntity = response.getEntity();
          String   result = EntityUtils.toString(httpEntity,     
      HTTP.UTF_8);
       Log.d("response", result);

        // write …
Run Code Online (Sandbox Code Playgroud)

java url android android-background

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

如何使用后台作业在Interval中查找用户访问的应用程序列表?

我想找出apps用户在特定时间间隔内访问的列表(例如:5分钟),来自后台作业?这可能在非根android电话上吗?如果可能的话,我非常有兴趣了解答案,因为它将是一个关于android的很好的学习.

android android-activity android-background

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

FCM 高优先级消息如何以及在什么条件下被取消优先级?如何从服务器获取缓存的 FCM 消息?

根据FCM 文档,如果 FCM 服务器检测到高优先级消息不会导致用户交互的模式,则高优先级消息可能会被取消优先级。这种机制的细节没有具体说明。问题:

  • 这是如何工作的?
  • 检测算法如何收集数据?
  • 消息被取消优先级多长时间?

其次,Android 应用程序有一个方法可以检查最近收到的消息的时间。如果具有正常优先级的消息尚未传递但仍缓存在 FCM 服务器上,则此方法有时会报告错误的结果。题:

  • 如何让 Android 应用程序首先获取所有消息?

一些可选的背景信息:

我正在为某些安全关键应用程序编写监控应用程序。本地服务器可以处于两种互斥状态中的一种:“空闲”或“警报”。状态通过 FCM 发送到所有注册的客户端。为确保服务器仍在运行,状态会作为心跳定期广播。这些心跳消息以正常优先级发送。此外,每当状态从“空闲”变为“警报”时,都会立即发送具有高优先级的附加异常消息。例如,消息序列类似于

...  idle  idle  idle  *alarm*  alarm  alarm  alarm  idle  idle  ...
Run Code Online (Sandbox Code Playgroud)

由于连续第一条警报消息触发通知,而所有其他消息仅具有正常优先级,因此(希望)没有被 FCM 取消优先级的风险。

Android 应用程序包含一个PeriodicWorkRequest用作看门狗并检查心跳是否仍在传入的 。如果最近收到的消息太旧(超过 30 分钟),则会向用户显示“连接丢失”通知以警告他。

这是问题所在:

通常的心跳消息具有正常的优先级并缓存在 FCM 服务器上。看门狗发出错误的“连接丢失”通知。设备被唤醒(由于通知),突然收到最新的心跳消息(它们在服务器上折叠)。

我看到两个解决方案(或解决方法):

  • 将所有消息设为高优先级消息,以便立即传送它们并且看门狗始终看到最新的消息。但是,我担心 FCM 去优先级算法会起作用。(99,95% 是无聊的“空闲”消息)

  • 在看门狗检查最新消息的时间并最终发出警告之前,我必须以编程方式确保已获取所有消息。

边注:

我完全理解为什么谷歌对后台执行和异步任务实施越来越多的限制。(广播接收器或多或少变得无用,AlarmManager 受到限制,JobScheduler 可以推迟,Android 9 引入了“备用桶”的概念。)许多开发人员滥用这些 API 来做疯狂的事情) 解决方案本来就存在。然而,所有这些限制使得实施受法律法规约束的安全关键应用程序变得非常困难,该应用程序必须提供可靠性保证,因此需要对不可靠的网络进行线路监控。

所有的电源管理机制似乎都没有考虑与安全相关的场景。用户无意使用该应用程序(这很好),并且在这种特殊情况下没有消息是好消息。即应用程序只是停留在后台。不幸的是,该应用程序被归类为“稀有”应用程序的备用存储区,并且该应用程序受到惩罚,这并不好。

android watchdog push-notification android-background firebase-cloud-messaging

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