小编pro*_*m85的帖子

活动可见时隐藏前台服务的通知

他们是一种将服务作为前台服务启动并在活动可见时隐藏通知的方法吗?

考虑一个音乐播放器,当应用程序打开时,您不需要通知(即按钮),但每当音乐播放器在后台时,都应显示通知.

我知道,怎么做,如果我不在前台运行我的服务...但是当在前台运行时,服务本身需要通知并显示它,我自己无法管理通知...

我该如何解决这个问题?

service notifications android foreground

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

BottomSheetDialogFragment - 允许滚动子项

我有BottomSheetDialogFragment一个RecyclerView.问题是,我想禁用拖动关闭功能,BottomSheetDialogFragment只要RecyclerView不向上滚动(目前我无法滚动我RecyclerView的尝试将始终关闭BottomSheetDialogFragment).任何想法如何实现这一目标?

android bottom-sheet

12
推荐指数
4
解决办法
4896
查看次数

覆盖服务 - 按下按钮按下

我怎样才能做到这一点?

当前解决方案

我发起了一个透明的活动,抓住了背压,然后将它转发给我的服务并随后关闭.但是这个活动将在当前的运行活动中可见,因此它不是一个非常漂亮的解决方案.

解决方案了

我已经看到一个应用程序确实能够在服务中抓住背压 - 没有一个活动可以抓住背压.如果我显示当前正在运行的活动,则此应用程序中没有任何内容.

如何才能做到这一点?我读了这么多线程说,这是不可能的,但我可以看到,有些应用程序以某种方式实现了......

service android overlay back

10
推荐指数
3
解决办法
4825
查看次数

检测到屏幕叠加 - 如何在屏幕叠加应用中处理此问题

某些设备具有额外的安全功能,并在显示权限对话框时检查应用是否在其他设备上绘制.

我有一个侧边栏应用程序,我的应用程序必须被禁用,然后用户才能接受系统对话框.

问题

  • 我怎么处理这个案子?
  • 有没有办法听一个"显示系统对话框"事件,这样我就可以删除我的侧边栏和"完成系统对话框",以便我知道,我可以继续我的侧边栏覆盖?我知道,这足以停止服务(你不必删除权限),所以这也是一个解决方案

编辑

我能想到的一个解决方案如下:

使用AccessibilityService以检查当前前台应用程序/视图.在那里,我将能够检查显示当前前景活动甚至视图的事件......

我的问题:

  • 我不知道如何识别那里的权限对话框.
  • 其次,这迫使我要求用户获得此权限(我想避免,但是使用此服务的解决方案,对我来说已经是一个改进,因为一些用户已经将此权限授予我的应用程序 - 我会然后问所有人并解释原因,这是我可以忍受的事情).

permissions android overlay

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

如果使用主题,则无法在onClick的活动类TintContextWrapper中找到onClick(View)方法

Could not find a method onClick(View) in the activity class android.support.v7.widget.TintContextWrapper for onClick handler on view class android.support.v7.widget.AppCompatButton添加了为我的应用程序选择黑暗或浅色主题的功能后,我最近得到了例外.

我在清单中设置主题,然后使用以下内容BaseActivity:

public abstract class BaseActivity extends AppCompatActivity
{
    private final int mLightTheme;
    private final int mDarkTheme;

    public BaseActivity(int lightTheme, int darkTheme)
    {
        mLightTheme = lightTheme;
        mDarkTheme = darkTheme;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        setTheme(MainApp.getPrefs().darkTheme() ? mDarkTheme : mLightTheme);
        super.onCreate(savedInstanceState);
    }
}
Run Code Online (Sandbox Code Playgroud)

还有什么想法会导致这个问题吗?我从运行4.2.2的设备上得到了这个问题...

不工作解决方案

  • 类似的问题建议theme从xml文件中删除标签=>我没有在我的xml中使用它,所以对我来说情况并非如此

堆栈跟踪

java.lang.IllegalStateException: Could not find a method onClick(View) in the …
Run Code Online (Sandbox Code Playgroud)

xml android onclick

10
推荐指数
2
解决办法
2604
查看次数

SearchView因通货膨胀错误(androidx)崩溃-找不到资源异常

SearchView在其中一种布局中添加,并在某些设备上出现崩溃。问题是abc_textfield_search_material找不到资源。但是我没有直接使用此资源,因为我的xml布局看起来像这样:

<androidx.appcompat.widget.SearchView
        android:id="@+id/svSearch"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"
        android:queryHint="@string/filter"
        app:iconifiedByDefault="false"
        android:paddingBottom="4dp"
        app:queryHint="@string/filter" />
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题?仅当稀有设备(少于1%)发生此崩溃时,大多数设备才能正常工作。我已经在考虑将其改为TextView使用复合可绘制对象,但是也许有比不使用A更好的解决方案了SearchView

堆栈跟踪

java.lang.RuntimeException: Unable to pause activity {com.my.app/com.my.app.MainActivity}: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
    at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4071)
    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4026)
    at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3978)
    at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:45)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1818)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6744)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.InflateException: Binary XML file line …
Run Code Online (Sandbox Code Playgroud)

android searchview androidx

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

在Fragment和FragmentStatePagerAdapter中使用ViewPager的片段导致异常(带有完整示例)

我有一个带有ViewPager的简单片段.

我正在使用最新的支持库,v4 rev18!

如果我第一次显示子片段,一切正常,如果我返回并再次显示它,应用程序崩溃时出现以下异常:

我有一个完整的例子显示,当发生以下异常时:

java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569)
at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281)
at android.view.View.dispatchRestoreInstanceState(View.java:12043)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.View.restoreHierarchyState(View.java:12021)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:949)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我能够以其他方式在子片段中使用ViewPager,但如果我手动添加/删除子片段并在子片段中使用FragmentStatePagerAdapter,我就无法使用它...

以下示例应该可以工作,但它没有...我已经添加了一些解决了一些问题的代码,但它并没有解决所有问题......

import java.lang.reflect.Field;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView; …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-support-library fragmentmanager

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

VideoView - MediaController没有显示

我不能让它工作......每当我触摸我的视频时,什么都没有惹人注意......虽然,我认为MediaController应该是可见的......

我目前使用以下功能播放我的视频:

private void playCachedVideo(final VideoView videoView, final Context c, File f)
{
    //videoView.setZOrderOnTop(true);        
    videoView.setOnPreparedListener(new OnPreparedListener()
    {
        @Override
        public void onPrepared(MediaPlayer mp) 
        {
            mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() 
            { 
                @Override
                public void onVideoSizeChanged(MediaPlayer mp, int width, int height) 
                {
                    MediaController mediaController = new MediaController(c);
                    mediaController.setMediaPlayer(videoView);
                    mediaController.setAnchorView(videoView);
                    videoView.setMediaController(mediaController);
                }
            });
        }
    });
    videoView.setVideoURI(Uri.fromFile(f));
    videoView.start();
}
Run Code Online (Sandbox Code Playgroud)

视频播放正常,但我无法显示任何MediaController ...

PS:我正在展示一名球员 DialogFragment

android mediacontroller android-videoview

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

避免EditText使用click事件

通常它足以设置focusable,focusableInTouch+ clickable为false.但在这里它不起作用.

我希望父母也LinearLayout能使用点击次数,EditText但它不起作用......

<LinearLayout
    android:id="@+id/llText"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:background="?attr/selectableItemBackground"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tvText"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:paddingRight="5dp"
        android:text="@null" />

    <EditText
        android:id="@+id/etText"
        android:inputType="none"
        android:gravity="center_horizontal"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="false"
        android:layout_width="wrap_content"
        android:ems="4"
        android:layout_gravity="center_vertical"
        android:layout_height="wrap_content" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我尝试过editable=false,inputType=none但它不起作用.为什么不?该EditText消耗点击到它的父并没有把它上.

编辑

我设置一个onClickListenerLinearLayout,如果我直接按它不工作EditText...

android onclick android-edittext

9
推荐指数
2
解决办法
1777
查看次数

正确删除DocumentFile(尊重MediaStore)

我有DocumentFile以下两种定义:

DocumentFile documentFile;
Uri documentFileUri;
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方法从SD卡中删除文档文件:

  1. documentFile.delete();
  2. DocumentsContract.deleteDocument(contentResolver, documentFileUri);

但以上方法均不能从中删除相应的条目MediaStore

处理该问题的正确方法是什么?如果我使用ContentProvider删除本地文件,它将File从数据库(contentResolver.delete(localFileUri, null, null);)中删除AND行。我希望如果使用,也会发生相同的情况,DocumentsContract但不会发生...

我想要的是

我想了解一下更新MediaStore。通常我会打电话给我,contentResolver.delete(documentFileUri, null, null);但这会失败,但有一个例外,说uri不支持删除...

是否有比我的解决方法更有效的方法?

解决方法

目前,我在删除a后使用以下功能立即更新媒体存储DocumentFile

public static boolean updateAfterChangeBlocking(String path, int timeToWaitToRecheckMediaScanner)
{
    final AtomicBoolean changed = new AtomicBoolean(false);
    MediaScannerConnection.scanFile(StorageManager.get().getContext(),
            new String[]{path}, null,
            new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    changed.set(true);
                }
            });

    while (!changed.get()) {
        try {
            Thread.sleep(timeToWaitToRecheckMediaScanner);
        } catch (InterruptedException e) …
Run Code Online (Sandbox Code Playgroud)

android storage-access-framework documentfile

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