三星设备(好吧,至少其中一些)将所有已安装的应用程序添加到"应用程序省电模式"列表中,该列表会影响后台服务,以便收听应用程序的一些重要信息.
某些应用程序在某种程度上在安装后禁用此模式,无需任何额外步骤.关于在三星线程上以编程方式禁用应用程序省电模式的评论表明Facebook和WhatsApp等应用程序可能在操作系统白名单中,但我看到的应用程序不那么受欢迎.知道怎么做到这一点?
我尝试过使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
意图但没有成功.PowerManager#isIgnoringBatteryOptimizations
开始返回,true
但应用程序没有禁用应用程序节能模式或省电设置设置.
如果您认为唯一的方法是联系三星将应用程序列入白名单,那么最佳位置是哪里?
此外,如果没有办法以编程方式禁用应用程序省电模式,有没有办法检测是否为应用程序启用了它,以便我可以打开应用程序并要求用户禁用它?
我正在使用RecyclerView作为一个很长的列表,当我滚动太快时,会发生一些奇怪的事情.有两个问题.
第一个是下图中的一个.其中一个项目(如图像中的红色边框)粘在屏幕的某个随机部分并阻挡其他项目.当该项目的真实版本在屏幕上可见时,它会消失.
滚动这个长的RecyclerView太快的另一个问题是坚持onClick效果.有些物品会像有人按下它们一样变得可见.
这些问题是关于我的适配器还是它们是关于RecyclerView的常见问题?这是我的适配器:
public class SimpleListItemRecyclerAdapter extends RecyclerView.Adapter<SimpleListItemRecyclerAdapter.ListItemViewHolder> {
Context context;
ArrayList<RecyclerItemModel> list;
OnRecyclerViewItemClickListener onRecyclerViewItemClickListener;
private int lastPosition = -1;
private boolean isClickable;
public SimpleListItemRecyclerAdapter(ArrayList<RecyclerItemModel> list, _FragmentTemplate fragment) {
this.list = list;
this.context = fragment.getActivity();
try {
this.onRecyclerViewItemClickListener = (OnRecyclerViewItemClickListener) fragment;
isClickable = true;
} catch (ClassCastException e) {
isClickable = false;
}
setHasStableIds(true);
}
@Override
public ListItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.item_sub_main_list_single_text,
parent,
false);
return new ListItemViewHolder(itemView, onRecyclerViewItemClickListener, isClickable, list.get(0).getHeight());
}
@Override
public …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将即时应用程序实现到使用Firebase数据库的项目中.我的目标是SDK版本27,因此支持库的版本为27.0.2.
Firebase数据库版本为11.8.0,gms版本为3.1.0.当我尝试同步时,我收到以下错误:
Android dependency 'com.android.support:support-v4' has different
version for the compile (25.2.0) and runtime (27.0.2) classpath. You
should manually set the same version via DependencyResolution
Run Code Online (Sandbox Code Playgroud)
通过在即时应用程序之前显式添加以下依赖项,我能够解决此问题
implementation 'com.android.support:support-v4:27.0.2'
implementation 'com.android.support:support-media-compat:27.0.2'
Run Code Online (Sandbox Code Playgroud)
但是对于即时应用程序,即使我在功能模块(app-base)中有它们,当我尝试构建实际应用程序(com.android.application)时,我再次得到相同的错误.
我可以通过将这些冲突的依赖项移动到应用程序模块gradle文件中来解决这个问题,在这种情况下,同步成功,但是我面临另一个问题,这次是使用清单合并,这会阻止应用程序查找启动器活动:
来自AndroidManifest.xml的属性提供者#com.google.firebase.provider.FirebaseInitProvider@authorities value =(com.iamkaan.packagename.firebaseinitprovider):AndroidManifest.xml中还有10:13-72:33:350-423 value = (com.iamkaan.packagename.base.firebaseinitprovider).建议:在AndroidManifest.xml:8:9-12:39中添加'tools:replace ="android:authorities"'来覆盖.app主要清单(此文件),第9行
最后一个问题在某种程度上与firebase-core
依赖关系有关,因为当我改变我的应用程序gradle依赖关系时
implementation project(':app-base')
Run Code Online (Sandbox Code Playgroud)
至
implementation (project(':app-base')) {
exclude group: 'com.google.firebase', module:'firebase-core'
}
Run Code Online (Sandbox Code Playgroud)
我能够运行该应用程序.但是这一次,我开始在运行时遇到以下错误(我第一次打电话FirebaseDatabase.getInstance()
)
Default FirebaseApp is not initialized in this process com.iamkaan.packagename. Make sure to call FirebaseApp.initializeApp(Context) …
Run Code Online (Sandbox Code Playgroud) android firebase android-gradle-plugin firebase-realtime-database android-instant-apps
我有一个框架和一个项目,在其中使用我的框架。我试图使用在开发过程中本地构建的框架。有没有办法做类似的事情:
如果my-local-library-path
存在,请执行以下操作:
pod 'MyLibraryName', :path => "my-local-library-path"
Run Code Online (Sandbox Code Playgroud)
否则,请执行以下操作:
pod 'MyLibraryName', git: 'https://github.com/mygithuburl', tag: '0.0.1'
Run Code Online (Sandbox Code Playgroud) 我有可过滤和可点击的RecyclerView
.但是当我过滤这个适配器时,我感到很恐怖
过滤前:
过滤后:
仍然显示位置3的项目
我的适配器:
public class PasalBabAdapter extends RecyclerView.Adapter<PasalBabVH> {
private List<PasalBabModel> mPasalBabModel;
private MyItemClickListener mItemClickListener;
private MyItemLongClickListener mItemLongClickListener;
public PasalBabAdapter(List<PasalBabModel> mPasalBabModel) {
this.mPasalBabModel = mPasalBabModel;
}
@Override
public void onBindViewHolder(PasalBabVH holder, int position) {
PasalBabModel bean = mPasalBabModel.get(position);
holder.p_TextView.setText(bean.pasalbab_p);
holder.b_TextView.setText(bean.pasalbab_b);
}
public PasalBabVH onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.pasalbab_row, parent, false);
PasalBabVH vh = new PasalBabVH(itemView, mItemClickListener, mItemLongClickListener);
return vh;
}
public void setFilter(List<PasalBabModel> PasalBabModels) {
mPasalBabModel = new ArrayList<>();
mPasalBabModel.addAll(PasalBabModels);
notifyDataSetChanged();
} …
Run Code Online (Sandbox Code Playgroud) android onclick android-adapter recycler-adapter android-recyclerview
我正在尝试使用 安排任务在特定时间运行WorkManager
。我之所以使用它beginUniqueWork
,是因为我只想为该特定 ID (uniqueWorkName) 一次安排一项任务。但enqueue
多次调用后,有时会出现以下错误:
java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:2012)
at android.os.Parcel.readException(Parcel.java:1950)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:44)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:85)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:64)
at androidx.work.impl.Schedulers.scheduleInternal(Schedulers.java:98)
at androidx.work.impl.Schedulers.schedule(Schedulers.java:69)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:398)
at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
当我在 every 之后使用以下代码片段记录待处理作业的数量时enqueue
,我注意到每次调用都会有 3 个新作业添加到列表中(虽然我预计总数会保持在 1)。
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
int size = jobScheduler.getAllPendingJobs().size();
Run Code Online (Sandbox Code Playgroud)
这是我用来安排任务的代码:
val work = OneTimeWorkRequest.Builder(workerClass)
.setInitialDelay(offset, TimeUnit.MILLISECONDS)
.build()
WorkManager.getInstance()
.beginUniqueWork(uniqueNameForTask, ExistingWorkPolicy.REPLACE, work)
.enqueue()
Run Code Online (Sandbox Code Playgroud)
这里看起来有什么不对劲吗?我缺少什么?
android android-jobscheduler android-jetpack android-workmanager