他们是一种将服务作为前台服务启动并在活动可见时隐藏通知的方法吗?
考虑一个音乐播放器,当应用程序打开时,您不需要通知(即按钮),但每当音乐播放器在后台时,都应显示通知.
我知道,怎么做,如果我不在前台运行我的服务...但是当在前台运行时,服务本身需要通知并显示它,我自己无法管理通知...
我该如何解决这个问题?
我有BottomSheetDialogFragment一个RecyclerView.问题是,我想禁用拖动关闭功能,BottomSheetDialogFragment只要RecyclerView不向上滚动(目前我无法滚动我RecyclerView的尝试将始终关闭BottomSheetDialogFragment).任何想法如何实现这一目标?
我怎样才能做到这一点?
当前解决方案
我发起了一个透明的活动,抓住了背压,然后将它转发给我的服务并随后关闭.但是这个活动将在当前的运行活动中可见,因此它不是一个非常漂亮的解决方案.
解决方案了
我已经看到一个应用程序确实能够在服务中抓住背压 - 没有一个活动可以抓住背压.如果我显示当前正在运行的活动,则此应用程序中没有任何内容.
题
如何才能做到这一点?我读了这么多线程说,这是不可能的,但我可以看到,有些应用程序以某种方式实现了......
某些设备具有额外的安全功能,并在显示权限对话框时检查应用是否在其他设备上绘制.
我有一个侧边栏应用程序,我的应用程序必须被禁用,然后用户才能接受系统对话框.
问题
编辑
我能想到的一个解决方案如下:
使用AccessibilityService以检查当前前台应用程序/视图.在那里,我将能够检查显示当前前景活动甚至视图的事件......
我的问题:
我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) 我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) 我有一个带有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
我不能让它工作......每当我触摸我的视频时,什么都没有惹人注意......虽然,我认为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
通常它足以设置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消耗点击到它的父并没有把它上.
编辑
我设置一个onClickListener到LinearLayout,如果我直接按它不工作EditText...
我有DocumentFile以下两种定义:
DocumentFile documentFile;
Uri documentFileUri;
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方法从SD卡中删除文档文件:
documentFile.delete();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 ×10
onclick ×2
overlay ×2
service ×2
androidx ×1
back ×1
bottom-sheet ×1
documentfile ×1
foreground ×1
permissions ×1
searchview ×1
xml ×1