小编iam*_*aan的帖子

禁用或检测应用特定的省电模式

三星设备(好吧,至少其中一些)将所有已安装的应用程序添加到"应用程序省电模式"列表中,该列表会影响后台服务,以便收听应用程序的一些重要信息.

某些应用程序在某种程度上在安装后禁用此模式,无需任何额外步骤.关于在三星线程上以编程方式禁用应用程序省电模式的评论表明Facebook和WhatsApp等应用程序可能在操作系统白名单中,但我看到的应用程序不那么受欢迎.知道怎么做到这一点?

我尝试过使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图但没有成功.PowerManager#isIgnoringBatteryOptimizations开始返回,true但应用程序没有禁用应用程序节能模式或省电设置设置.

如果您认为唯一的方法是联系三星将应用程序列入白名单,那么最佳位置是哪里?

此外,如果没有办法以编程方式禁用应用程序省电模式,有没有办法检测是否为应用程序启用了它,以便我可以打开应用程序并要求用户禁用它?

android power-saving samsung-mobile

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

滚动RecyclerView太快时发生了一些奇怪的事情

我正在使用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)

android android-recyclerview

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

Firebase支持即时应用程序的库依赖冲突

我正在尝试将即时应用程序实现到使用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

6
推荐指数
1
解决办法
2929
查看次数

在podfile中使用框架的本地副本(如果存在)

我有一个框架和一个项目,在其中使用我的框架。我试图使用在开发过程中本地构建的框架。有没有办法做类似的事情:

如果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)

ios ios-frameworks cocoapods swift podfile

5
推荐指数
1
解决办法
2429
查看次数

RecyclerView onClick在过滤器适配器上的geting错误

我有可过滤和可点击的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

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

WorkManager 向 JobScheduler 添加了太多作业

我正在尝试使用 安排任务在特定时间运行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

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