是否可以直接从程序中更改应用程序图标?
我的意思是,改变icon.png了在res\drawable文件夹中.
我想让用户从程序中更改应用程序的图标,以便下次他们在启动器中看到之前选择的图标.
我需要知道用户何时杀死我的应用程序(强制停止).我一直在阅读android生命周期,它具有onStop()和onDestroy()功能,这些与用户在我的应用程序上结束的每个活动相关,但不是在用户强制停止或杀死我的应用程序时.
有没有办法知道用户何时杀死应用程序?
我有一点问题.
在我的应用程序中,在用户成功登录后启动服务.以前,如果应用程序被杀,该服务需要停止.(比如,通过滑动从最近的应用程序列表中删除.)所以我们使用过android:stopWithTask="true".现在我们需要服务按原样运行,即使启动它的任务从最近的应用程序列表中删除.所以我把服务改为包含android:stopWithTask="false".但这似乎不起作用.
相关代码:
这是与服务相关的明显部分:
<service
android:enabled="true"
android:name=".MyService"
android:exported="false"
android:stopWithTask="false" />
Run Code Online (Sandbox Code Playgroud)
在MyService.java中:
public class MyService extends AbstractService {
@Override
public void onStartService() {
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new Notification(R.drawable.ic_launcher, "My network services", System.currentTimeMillis());
notification.setLatestEventInfo(this, "AppName", "Message", pendingIntent);
startForeground(MY_NOTIFICATION_ID, notification);
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Toast.makeText(getApplicationContext(), "onTaskRemoved called", Toast.LENGTH_LONG).show();
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
}
}
Run Code Online (Sandbox Code Playgroud)
AbstractService.java是扩展的自定义类Sevrice:
public abstract class …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,当我在一个特定的Activity上时,我们会显示一个本地粘性通知.当应用程序最小化时也应如此.我必须完成的是在应用程序被杀死时删除本地通知(由于内存不足或由用户通过Android,从最近的应用列表中滑动).
通常onDestroy会在Android使用Activity打开一些空间时调用.在其中一种情况下这很好,但是从最近的应用程序列表中滑动应用程序不会调用onDestroy并且粘滞通知保持不变.
我做的是,我实现了一个空的服务,它将强制onDestroy应用程序被杀死(刷卡和系统杀死),这样我就可以删除我的通知.
但是,我想要做的是区分滑动和系统杀死.
这甚至可能吗?
我现在很困惑,关于运行和停止的服务概念:
我想做的事:
在应用程序启动时启动位置服务.
继续获取位置更新并将其存储到共享首选项
在应用程序范围的onDestroy中停止服务!
到目前为止,我已经搜索和研究过我们只能做服务的事情(如果我错了,请纠正我):
通过将服务绑定到相关活动/片段/视图来自动停止服务,当它们全部销毁服务时自动取消绑定,这样我们就可以stopself在unbind中调用方法
在onStartCommand中返回START_NOT_STICKY以告诉操作系统,不重新创建它,并创建意图本地服务,在完成某些工作后它将自行销毁.
通过在某种静态范围内声明它的意图并停止onActivityDestroyedApplication类中的服务来手动停止服务[我不确定会发生什么?,每次活动被销毁时,服务会破坏吗?或者它只会在整个应用程序被销毁时销毁?]
无论哪种方式,我有点困惑和打败,一直试图调整我Location service的给定细节2天
我在最近2天遇到了一个问题,我想点击api并向用户显示Toast当用户从后台任务中刷掉应用程序时,我发现从应用程序从后台删除时service可能会出现这种情况onTaskRemoved.
代码:
MyService.java
public class MyService extends Service {
private static final String TAG = MyService.class.getSimpleName();
Handler mHandler;
@Override
public void onCreate() {
super.onCreate();
mHandler = new Handler();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand: ");
mHandler.post(new Runnable() {
@Override
public void run() {
new ToastPoP(MyService.this).showLongToast("Service started");
}
});
return Service.START_STICKY;
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我有一个涉及导航的应用程序.如果用户启动导航,则会创建一种"navigationLifecycleManager".它存储在应用程序实例中,以便在配置更改,活动等之间切换时幸免于难.
但是,如果用户"退出"应用程序,我想杀死一些后台线程,将一些次要数据存储到应用程序存储中,依此类推.所以我需要一些钩子告诉我应用程序何时退出.
必须通过覆盖"onPause"并检查"isFinishing"来实现.但这并不能解决最近的应用程序列表中的问题.滑动似乎没有任何东西.无论是"的onPause","的onDestroy",也不是"onTerminate"是所谓的活动/应用.
我有一个Android应用程序,即使在后台,该应用程序也可以连接到当前正在运行同一应用程序的周围设备。
为此,我使用WiF-Direct宣传我当前正在运行所述应用程序的事实。
因此,一旦该应用被终止,我需要停止对此进行宣传。
onDestroy() 无法使用,因为不能保证会被调用。onStop()onPause()由于该应用仍在运行,因此无法使用。我该如何实现?
当前,即使关闭或终止了该应用程序,该服务仍在发布。
我发现onDestroy()只有在按下后退按钮时才会调用,而不是在使用最近的应用程序(通过按十字或滑动应用程序)或在应用程序管理器中关闭应用程序时调用。
下面是我的代码onDestroy():
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE))
.clearApplicationUserData();
}
Run Code Online (Sandbox Code Playgroud)
我编写了在onDestroy()调用时删除数据和缓存的代码,所以如果有人按下后退按钮,数据和缓存会清除并且应用程序关闭(而不是进入后台)但是当我从最近的应用程序或应用程序管理器关闭它时数据和缓存仍然存在。
如何在我的应用程序关闭时删除数据?
我已安排工作经理定期在特定时间执行任务。但它正在与其他Android版本一起使用,例如25或更低版本。当我在API 28上运行它时,如果我从最近的列表中清除应用程序,它将停止触发广播。
我在活动中安排了这样的工作经理:
OneTimeWorkRequest mywork = new OneTimeWorkRequest.Builder(MyWorker.class).setInitialDelay(15, TimeUnit.SECONDS).build();
WorkManager.getInstance().enqueue(mywork);
Run Code Online (Sandbox Code Playgroud)
这是我的工人班:
public class MyWorker extends Worker {
@NonNull
@Override
public Worker.WorkerResult doWork() {
// Do the work here
Mylogger.getInstance().printLog("MyWorr","doWork()");
//fire broadcast from here
Intent broadcastIntent = new Intent(getApplicationContext(), TimeMatchingBroadcastReceiver.class);
getApplicationContext().sendBroadcast(broadcastIntent);
CommonUtils.scheduleWorkManager();
// Indicate success or failure with your return value:
return WorkerResult.SUCCESS;
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
Run Code Online (Sandbox Code Playgroud)
即使关闭或清除所有版本的android上的最新应用程序,我也要执行工作管理器。谢谢。
android android-service android-lifecycle android-jetpack android-workmanager