标签: android-service

同一应用程序的两个进程之间的共享首选项

我正在编写一个Android应用程序,其中包含UI和运行的单独进程.我想在主进程和我的应用程序中定义的服务之间共享简单信息,该服务在不同的进程中执行.为了这个目的,我发现使用AIDL进行进程间通信会很麻烦.

问题是:使用应用程序的共享首选项在这两个进程之间进行通信是否安全?这是:读取和写入相同的共享首选项.

我想知道它是否真的有效.在android开发人员中有关共享首选项的参考(http://developer.android.com/reference/android/content/SharedPreferences.html),他们声明:注意:目前这个类不支持跨多个进程使用.这将在稍后添加.但我不确切地知道这是什么意思.

谢谢你的帮助

android android-service sharedpreferences

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

你可以在一个单独的进程上启动IntentService吗?

  1. 是否可以在单独的进程上启动IntentService?怎么样?如果是这样,是否必须绑定它?
  2. 是否可以在单独的进程上启动IntentService 并在前台运行它
  3. android:isolatedProcess和之间有什么区别android:process?请参阅:http://developer.android.com/guide/topics/manifest/service-element.html

android android-service

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

使用ListView Android中的进度条下载多个文件

我想创建一个ListView允许用户下载许多文件并在每个ListView项目中显示进度条状态的创建.它看起来像这样:

在此输入图像描述

下载ListView有一些规则:

  • 每个下载任务都显示在一个ListView项目中,其中包含进度条,百分比和当前状态(下载,等待,完成).
  • 允许最多5个下载任务,其他任务必须等待
  • 用户可以取消下载任务,并从中删除此任务 ListView
  • ListView是在下载活动中.用户可以更改为其他活动.当他们离开时,继续在后台下载.当他们回来时,显示下载任务的当前进度和状态.
  • 保留已完成的下载任务,直到用户想要删除它们.

我试着用ThreadPoolExcutor一个Service.对于每个下载任务,我可以完成百分比,但我不知道如何将它们广播到适配器以显示进度.而且我不知道如何在后台运行所有任务,然后在包含活动的活动ListView处于活动状态时发布进度并保留已完成的任务
如果有任何库或示例可以解决我的问题,那将会很棒.提前致谢! P/S:我已经搜索过类似的问题,但我找不到这个问题的解决方案,所以我不得不详细地创建自己的问题.所以请不要将其标记为duplicate.谢谢.

android android-service android-listview

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

如何在锁定屏幕上执行通知操作(单击)?

TL; DR

如何在没有解锁的情况下从锁定屏幕发出一些有效的通知?单击操作,通知上的按钮或完成通知后,我想进行API调用(无需键入解锁代码)

细节

目标

基于这个问题的答案,我试图通过一个在锁定屏幕上工作的动作发出通知,而无需解锁设备.该操作不需要任何进一步的界面或交互(想想"发送API请求").

状态

通知和单击可以使用未锁定的设备.然而,当锁定时我仍然需要先输入解锁代码,所以要么有新的事情发生,要么我误解了它应该工作的方式.

如果我理解正确,我可以将我的可见性设置为'public'来显示内容(这是有效的),而不是定义一个动作(似乎不公开)我可以处理(现在可见)布局的点击.我尝试使用下面的代码,但显然它不起作用.

我已经尝试将意图发送到我的应用程序和服务,正如弗洛里安建议的那样.

这是我开始通知的代码(它存在于一个Activity中,代码缩短了以方便您使用)

private void startNotification() {

    NotificationCompat.Builder builder = 
            new NotificationCompat.Builder(this)
            .setVisibility(Notification.VISIBILITY_PUBLIC)
            .setOngoing(true)
            .setSmallIcon(R.drawable.abc_ic_menu_share_mtrl_alpha)
            .setContentTitle("title text")
            .setContentText("content text");

    Intent openIntent = new Intent(MyMainActivity.this, MyMainActivity.class);
    openIntent.setAction("some_string");
    PendingIntent pOpenIntent = PendingIntent.getActivity(this, 0, openIntent, 0);
    builder.setContentIntent(pOpenIntent);

    RemoteViews view = new RemoteViews(getPackageName(), R.layout.notification);
    builder.setContent(view);

    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    mNotificationManager.notify(id, builder.build());

}
Run Code Online (Sandbox Code Playgroud)

如上所述,我也尝试过florian建议的服务,并将其作为电话:

    Intent yepIntent = new Intent(this, MyIntentService.class);
    yepIntent.setAction("test");
    yepIntent.putExtra("foo", true);
    yepIntent.putExtra("bar", "more info");
    PendingIntent yepPendingIntent = PendingIntent.getService(this, notificationId, yepIntent, PendingIntent.FLAG_CANCEL_CURRENT); …
Run Code Online (Sandbox Code Playgroud)

notifications android lockscreen android-service android-5.0-lollipop

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

用于getRunningServices的Android O替换

在以前的Android版本中,我使用此方法查找来自其他应用程序的服务是否已启动并正在运行.它对我来说可靠:

ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> services = manager.getRunningServices(Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)

但是,对于Android O,现在不推荐使用此功能,只会返回有关调用应用服务的信息.我已经研究过其他解决方案,但我不想要求用户提供更多权限(UsageStatsManager,NotificationManager等).

是否有另一种解决方案可以获取Android O中是否有来自其他应用的服务正在运行?

android android-service

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

Android 12 - 前台服务启动限制

我正在开发一个SDK,需要从后台启动Foreground服务。因为它使用的是后台定位和蓝牙相关的作品。如果应用程序被终止,监控将在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。

目前,我的 SDK 使用Service来处理这项工作。但Android 12上不支持从后台启动服务。

我试图从后台启动服务,下面的异常抛出。

ForegroundServiceStartNotAllowedException: Service.startForeground() not allowed due to mAllowStartForeground false
Run Code Online (Sandbox Code Playgroud)

我如何使用WorkManager 来解决这个问题,我的所有处理都是由 Service 类完成的,如何将 Service 对象传递给Worker类并在 Worker 类中启动此作业。

实际上,我的项目是基于信标技术的。信标信号用于向用户显示不同的推荐。

在我当前的实现中,如果应用程序被用户杀死,并且还接受前台服务,则SDK将在后台运行。并检测信标并提供适当的操作。

我的实现是,如果应用程序使用前台服务“关闭”来初始化我的 SDK,那么稍后,当应用程序位于后台并尝试从后台启动前台服务时,会抛出此异常。与前台服务相关的决策由服务器端 API 持有。我定期检查服务器端值是否更改,如果值更改,则更改后的操作会反映在 SDK 中。

android android-service foregroundnotification android-workmanager android-12

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

访问sim工具包的android应用程序

我想构建一个访问来自sim工具包的信息的应用程序.我的运营商允许您访问诸如查看帐户余额,发送和接收现金以及大量服务等服务.是否有任何资源,教程甚至只是指示我如何访问SIM工具包中的信息.

android sim-toolkit android-service

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

android中的service,intentService有什么区别?

Android ServiceIntentServiceAndroid 之间有什么区别?

Android AsyncTaskIntentServiceAndroid 之间有什么区别?

android android-service android-asynctask intentservice

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

应用程序从最近的应用列表中删除后,Android服务崩溃

我有一个由活动启动(未绑定)的服务.如果活动被破坏(例如通过按下后退按钮),则服务继续运行,这当然是有意的.但是,如果我将活动从"最近的应用"列表中滑出,则会立即重新启动该服务.这是可重现的,每次从列表中删除活动/应用程序时,都会对服务的onCreate方法进行新调用.两者之间没有调用onDestroy!

首先我认为服务被android杀死了,尽管我没有看到杀人的理由(活动和服务都没有资源消耗的东西,事实上它们是简约的,什么都不做).但后来我注意到服务实际上崩溃了.

V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
Run Code Online (Sandbox Code Playgroud)

代码并不值得注意,但在这里

活动:

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.v(TAG, "onCreate, starting service...");
        startService(new Intent(this, TestService.class));
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.v(TAG, "onStart");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.v(TAG, "onDestroy");
    }

    //[...]
}
Run Code Online (Sandbox Code Playgroud)

服务:

public class TestService extends …
Run Code Online (Sandbox Code Playgroud)

android android-service

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

永久收听剪贴板更改

我正在构建一个应用程序,它将启动一个能够监听剪贴板更改的服务.

我真正想要的是永久记录(并在存储中写入)剪贴板中的每一个变化,所以当我启动我的应用程序时,我可以读取该服务所写的存储文件.这意味着,我的应用程序和服务之间不需要直接通信,也不需要使用唤醒锁来保持设备运行(因为剪贴板在设备处于睡眠状态时几乎不会改变).

我正在使用处理程序来反复检查剪贴板,我想知道如何实现clipboardListener来检查这些更改.

clipboard android android-service clipboardmanager

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