Articles of android service

在点击通知操作上隐藏Foreground Service的通知

我有一个具有前端通知的前台服务的警报应用程序,该通知有两个操作,其中一个向服务发送意图并可以根据应用程序配置打开活动。 问题是,当我点击将意图发送到服务的操作时,通知不会隐藏。 当intent打开Activity时,似乎不会发生这种情况 我不想要没有通知的前台服务,我只是希望它在将意图发送到服务时将其隐藏回通知抽屉 这是代码: NotificationCompat.Builder(mAlarmApplication, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notification_alarm) .setAutoCancel(false) .setOngoing(true) .setVibrate(LongArray(0)) .setContentTitle(“Title”) .setContentText(“Content”) .addAction(0, dismissActionText, dismissPendingIntent) .setCategory(NotificationCompat.CATEGORY_ALARM) .setPriority(NotificationCompat.PRIORITY_MAX) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentIntent(alarmScreenPendingIntent) .setFullScreenIntent(alarmScreenPendingIntent, true) 以下是应用https://play.google.com/store/apps/details?id=com.garageapp.alarmchallenges的链接。 警报启动时出现问题,我当前的解决方案是更新旧的抬头通知,使用一个新的抬头通知,但是UX不是很好,因为在Android 8+上通知新通知会popup老化

Android Sync Sqlite

我正在制作一个使用SQLite的应用程序的字典。 我有一个单独的表来保存这对外来单词及其翻译。 我想将此表与Google文档中的特定电子表格同步 。 我find了这个很棒的库来检索和操作GoogleSpreadsheets ,所以至少我已经被覆盖了。 但我对同步感到不舒服。 现在, 我可以使用SyncAdapter在我的SQLite和GoogleSpreadsheet之间进行此同步吗? 如果是的话,我该怎么做呢? 我会在onPerformSync或smth中检索和操作电子表格的行吗? 这种情况的其他替代方案可能是什么? 我可以使用普通服务在用户请求时进行检查(例如,在主要活动中)吗? 在Google I / O vids上(特别是在Android REST客户端应用程序上 ),使用SyncAdapter似乎很有说服力,但我不确定它是否可以帮助我没有实际的REST服务。 提前致谢..

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

我有一个需要在后台运行的应用程序,所以我正在使用WakeFullService。 但是在Asus Zenfone中它没有用,因为Auto Start manager不允许应用程序运行。 我的期望是: 在我们的应用安装期间或应用开放时在自动启动管理器中设置“允许权限”。 华硕自动启动管理器是否有任何API可以帮助我检查我的应用程序的权限状态,以便我可以通过正常文本警报通知用户打开权限。

在Android中叠加窗口服务

我必须实现像True Caller App一样的覆盖窗口。但我得到的问题是,在任何传入或传出呼叫期间,我的服务自动关闭或销毁。 服务类 public class OverlayService extends Service implements View.OnClickListener,NotifyHardwareChanges,UpdateSoundDB{ private WindowManager windowManager; WindowManager.LayoutParams params; View view; Button btnEndCall; public static TextView textView; public static Context cntxt; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // Let it continue running until it […]

无法执行同步(未调用onPerformSync)

我按照这个标题为什么ContentResolver.requestSync不会触发同步? 但同步方法未出现在设置屏幕中的帐户和同步中。 我认为没有调用onPerformSync() 。 我尝试调试但没有find错误日志。 这是我的代码: syncAdapter.xml <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="@string/ACCOUNT_TYPE" android:contentAuthority="@string/AUTHORITY" android:userVisible="true" android:isAlwaysSyncable="true" /> SyncService.java public class CalendarSyncService extends Service{ private static SyncAdapterImpl sSyncAdapter = null; private static String list_event_ids; private static Requestor requestor; public void onCreate(){ super.onCreate (); if (sSyncAdapter == null) sSyncAdapter = new SyncAdapterImpl(this); } @Override public IBinder onBind(Intent arg0) { // […]

将数据从服务发送到Android活动

我正在构建一个使用服务进行播放的音乐播放器。 我有一个Activity UI来控制(播放,暂停,下一步……)服务。 我想在按下下一个或上一个按钮时从我的服务更新UI。 我想过传递一个整数值。 这是我的代码: 我用过信使进行交流。 我服务中的代码如下: enum Event { NextSongChanged, CurrentPlayingSong }; public synchronized void registerHandler(Messenger m) { clients.add(m); } private void emit(Event e) { for (Messenger m : clients) { try { m.send(Message.obtain(null, e.ordinal())); } catch (RemoteException exception) { /* The client must’ve died */ clients.remove(m); } } } 我打电话的方法点击下一步按钮: public synchronized […]

在服务中实现线程池

我正在努力实现一个Service ,当请求它将在几个并行线程上执行一些工作。 我的实现基于ThreadPoolExecutor类和LinkedBlockingQueue 。 作为一项基本规则,一旦完成所有任务并且队列中没有待处理任务,我想停止服务(尽管稍后可以再次启动该服务并遵循相同的逻辑)。 我已经能够使用下面的代码达到预期的结果,但我不确定这种方法是否正确。 public class TestService extends Service { // Sets the initial threadpool size to 3 private static final int CORE_POOL_SIZE = 3; // Sets the maximum threadpool size to 3 private static final int MAXIMUM_POOL_SIZE = 3; // Sets the amount of time an idle thread will wait for a […]

SpeechRecognizer导致ANR …我需要Android语音API的帮助

编辑 :我应该已经提到过这一点,但我在服务中运行此代码。 整个应用程序由小部件按钮打开/关闭,没有任何活动。 更新 :我尝试将SDK源附加到项目中,这样我就可以更准确地了解发生故障的位置,但从外观来看 ,只包含公共API,这似乎使它们的用处更少。任何人都可以建议至少一种调试方法来解决这个问题吗? 我有点卡住了。 我正在尝试使用Android的语音识别软件包来记录用户语音并将其翻译成文本。 不幸的是,当我尝试启动收听时,我收到的ANR错误并未指出任何具体内容。 正如SpeechRecognizer API指示的那样,如果您尝试从主线程调用它,则抛出RuntimeException。 这会让我想知道处理是否过于苛刻…但我知道其他应用程序使用Android API来达到这个目的,它通常非常活泼。 java.lang.RuntimeException: SpeechRecognizer should be used only from the application’s main thread 这是我试图从我的服务中调用的代码的一个(修剪过的)示例。 这是正确的方法吗? 感谢您抽出宝贵时间提供帮助。 这是一个我无法克服的障碍。 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, “com.domain.app”); SpeechRecognizer recognizer = SpeechRecognizer .createSpeechRecognizer(this.getApplicationContext()); RecognitionListener listener = new RecognitionListener() { @Override public void onResults(Bundle results) { ArrayList […]

用Greenrobot Eventbus替换广播接收器以触发基于事件的function和从服务到活动的数据传输是否合适?

我已经实现了一个服务,我处理状态更改(连接,断开连接,onServiceDiscoverd,onCharacteristicChange等)并通过gatt服务器从另一个设备接收数据。 我的问题是,使用Greenrobot Eventbus替换服务和活动之间的广播接收器能否有效地处理事件?

绑定到另一个应用程序的服务

我写了两个应用程序(目标姜饼)。 让我们说app1和app2。 App1有两个以“BOOT_COMPLETED”开头的服务,它们以返回值START_STICKY开头。 它们在不同的线程中运行。 使长话短说。 其中一项服务是监视串行端口上的传入数据(一种代理,用于与串行端口另一端的接口通信的应用程序)。 另一个让听众看一些系统状态并等待来自其他应用程序的一些“指令”。 我知道它们运行良好,因为它们列在正在运行的服务中,并且我添加了一些代码,当某些特定数据来自串行端口时,它会强制它们执行某些操作。 现在的问题是:我写了app2。 它尝试绑定到app1中的一个服务。 我使用了android-developper文档,并在app1和app2中的服务之间实现了双向通信。 由于我只需要发送少量非常简单的数据,因此我建议使用信使。 我基本上只是使用“what,arg1和arg2”我没有使用AIDL接口,因为文档建议。 这是androidmanifest在app1中声明服务的部分我也尝试绑定。 然后,以下是在app1中处理此问题的几种方法: @Override public IBinder onBind(Intent intent) { Log.d(TAG, “entering onBind”); return mMessenger.getBinder(); } /** * Handler of incoming messages from clients. */ class IncomingHandler extends Handler { @Override public void handleMessage(Message msg) { String logMessage = “Received meaasge what= %d, arg1= […]