小编Mar*_*her的帖子

Gradle 找不到 Android Compose 编译器

我对这个问题感到非常困惑。我的gradle文件中有以下几行:

implementation "androidx.compose.runtime:runtime:1.0.0-alpha04"
implementation "androidx.compose.compiler:compiler:1.0.0-alpha04"
implementation "androidx.compose.runtime:runtime-rxjava2:1.0.0-alpha04"
Run Code Online (Sandbox Code Playgroud)

但是,当我构建时,出现以下错误:

Could not determine the dependencies of task ':app-name-omitted:prepareDebugKotlinCompileTask'.
> Could not resolve all task dependencies for configuration ':app-name-omitted:kotlin-extension'.
   > Could not find androidx.compose:compose-compiler:1.0.0-alpha04.
     Searched in the following locations:
       - https://dl.google.com/dl/android/maven2/androidx/compose/compose-compiler/1.0.0-alpha04/compose-compiler-1.0.0-alpha04.pom
       - https://repo.maven.apache.org/maven2/androidx/compose/compose-compiler/1.0.0-alpha04/compose-compiler-1.0.0-alpha04.pom
       - https://jcenter.bintray.com/androidx/compose/compose-compiler/1.0.0-alpha04/compose-compiler-1.0.0-alpha04.pom
     Required by:
         project :app-name-omitted

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑,因为编译器确实存在于 Google 的 repo 中:https ://maven.google.com/web/index.html#androidx.compose.compiler:compiler

如有必要,我可以发布更多信息,但我想保持简单。即使 compose 设置完全错误,为什么也找不到 POM 文件?

android android-gradle-plugin android-jetpack-compose

26
推荐指数
4
解决办法
7625
查看次数

在android中如何在播放时将RTSP流保存到文件?

我需要能够播放通过RTSP接收的视频并同时将其保存到光盘(即SD卡).这是一个实时流,所以我不能先下载整个文件然后播放它.我必须同时演奏和录音.我可以使用MediaRecorder从机载摄像机录制视频,我可以使用MediaPlayer或VideoView接收RTSP流,但我不知道如何将两者结合起来.

MediaRecorder似乎是录制视频的唯一方式,但它只支持一个视频源:相机.它的setVideoSource()方法不允许其他来源.也许我需要以某种方式得到一个OutputStream,然后我可以写入一个文件?

谢谢你的帮助.

android rtsp media-player

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

Android应用程序产生线程与服务之间的区别?

我有一个Android应用程序,需要在后台和单独的线程上执行工作.对于我的第一个概念验证,我将Application类子类化,并在onCreate()中生成一个执行后台工作的Thread.这很有用.但是,我刚才意识到,过去我曾在这种情况下使用过服务.

问题是,是否有理由对从Service生成的Thread而不是Application.onCreate()生成的Thread进行操作?该服务应该执行"后台"工作(它使用UI线程,除非使用了线程,我知道),它独立于Activity,并且可以在没有Activity可见的情况下运行.使用基于应用程序的线程似乎也完成了所有这些.通过不使用服务,它实际上消除了复杂性,因为Activity只是访问应用程序单例.据我所知,我没有必要绑定到服务.

我会得到使用服务会阻止的生命周期角落情况吗?这是我对这种方法的唯一担忧,但除此之外,我并没有以服务的好处出售.

android

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

使用ViewPager时,Fragment.setUserVisibleHint()中的NPE

我为此感到茫然.我在ViewPager中手动切换标签.我在Activity中有这个代码:

@Override
public void onBackPressed()
{
    if (childFragmentStack.empty())
    {
        // Go to the devices screen
        Intent intent = new Intent(this, SelectDeviceActivity.class);
        startActivity(intent);
    }
    else
    {
        Fragment fragment = childFragmentStack.pop();

        if (fragment == null)
        {
            return;
        }

        processingBackStack = true;

        if (fragment instanceof ViewChildFragment)
        {
            viewFragment.activateFragment((ViewChildFragment) fragment);
            mViewPager.setCurrentItem(VIEW_FRAGMENT_INDEX, true);
        }
        else if (fragment instanceof SetupChildFragment)
        {
            setupFragment.activateFragment((SetupChildFragment) fragment);
            mViewPager.setCurrentItem(SETUP_FRAGMENT_INDEX, true); //**
        }
        else if (fragment == homeFragment)
        {
            mViewPager.setCurrentItem(HOME_FRAGMENT_INDEX, true); //**
        }

        processingBackStack = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在选项卡之间滚动,我将它们添加到堆栈('childFragmentStack').我正在使用FragmentPagerAdapter来处理片段.如果我执行View-> Setup-> View-> Setup之类的操作然后将其反转,它只会达到Setup-> …

android android-fragments

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

当应用程序转到后台时,阻止对话框(或DialogFragment)关闭

我的应用程序显示进度或AlertDialog用户非常常见.如果用户将应用程序放入后台然后稍后返回,我希望Dialog仍然显示该应用程序.有没有办法让Android处理这个?我想它要么不关闭对话框,要么在Activity恢复时自动重新打开它.

到目前为止它看起来像没有.我没有找到大量关于此的结果(大多数人遇到方向更改的问题,我的应用程序不允许),但很少有人询问进入后台.我已经尝试了DialogFragment常规的每个排列Dialog,但是当按下主页按钮并且从任务管理器打开应用程序时,它们都会消失.

我甚至没有任何代码可以展示,因为它们都处于在线各种示例的测试阶段.我怀疑我必须自己管理这个,通过签入onResume()是否应该显示的东西.如果是这种情况我可以忍受它,但我想知道肯定.

android android-dialog android-dialogfragment

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

String.Format()不起作用,但string.Format()起作用

如果不亲眼所见,我不会相信这一点。

string test = String.Format( "{0} test {1}", "Mark", 13 );
Run Code Online (Sandbox Code Playgroud)

结果为"{0} test {1}"for变量test

string test = string.Format( "{0} test {1}", "Mark", 13 );
Run Code Online (Sandbox Code Playgroud)

结果为"Mark test 13"for变量test

哇哈哈阿阿特?顺便说一下,这是Xamarin。我在这里很困惑。Visual Studio 8.0.4。我已经将testUI 的值分配给UI元素,将其记录到LogCat,并使用调试器进行了查看。他们都同意这个奇数。

c# xamarin.android xamarin

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

Android上的USB设备的Linux文件权限

我正在开发一个运行Android的自定义平板电脑(由我的公司构建为销售工具)的应用程序.应用程序需要通过虚拟串行端口与连接的USB设备进行通信.驱动程序已安装并运行良好(它是Silicon Labs的CP2101 USB转UART桥控制器).我使用的是串行端口库,网址为:http://code.google.com/p/android-serialport-api/.

问题是无论何时安装设备我都无权在Android中打开它.Android串口库需要打开一个文件,通常是/ dev/ttyUSB0,但是应用程序没有这样做的权限.如果我打开adb shell并运行"chmod 666/dev/ttyUSB0",一切都很棒.当然,我需要一个更持久的解决方案.

我不认为init.rc会起作用,因为我希望能够在安装时修改设备文件,而不仅仅是在启动时.有没有办法强制Linux以更宽松的权限安装此设备(或任何设备)?

提前致谢.

linux usb android serial-port android-ndk

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

如何防止片段的onCreateView()被调用?

所以这是我的代码.'currentFragment'只是一个跟踪当前显示内容的字段.这是一个本身就是片段的类(所以我有一个显示片段的片段).

private void selectNavBarItem(NavbarItem v)
{
    Fragment fragmentToUse = null;

    if (v == setpointsNavItem)
    {
        fragmentToUse = setpointsFragment;
    }
    else if (v == rapidSetupNavItem)
    {
        fragmentToUse = rapidSetupFragment;
    }
    else if (v == outdoorResetNavItem)
    {
        fragmentToUse = outdoorResetFragment;
    }
    else if (v == rampDelayNavItem)
    {
        fragmentToUse = rampDelayFragment;
    }

    if (fragmentToUse != null)
    {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        if (currentFragment != null)
        {
            ft.detach(currentFragment);
        }

        currentFragment = fragmentToUse;

        if (currentFragment.isDetached())
        {
            ft.attach(currentFragment);
        }
        else
        {
            ft.add(R.id.setup_content_holder, …
Run Code Online (Sandbox Code Playgroud)

android android-framework android-fragments

6
推荐指数
2
解决办法
3924
查看次数

NonNull注释有什么意义?

我不知道NonNull注释应该如何帮助.所以,让我说我有这个:

void noNullArg(@NonNull Object o)
{
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到关于"o"如何为空的警告.

void foo()
{
    Object o = null;
    noNullArg(o);
}
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,我根本不会收到任何警告.

void sendNull()
{
    // Pass null and violate the annotation
    foo(null);
}

void foo(Object o)
{
    noNullArg(o);
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常微不足道的案例,未被发现.最重要的是,编译器似乎认为如果设置@NonNull则检查null是不必要的,当它显然不是时(它表示条件总是为假).

java android

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

为什么发现Android Wi-Fi Direct的同行如此不可靠?

我正在尝试使用Android的Wi-Fi Direct(如果您愿意,还可以使用P2P).我以为它在我的两部手机之间工作得非常好,但我意识到我遇到了WifiP2pManager.discoverPeers()和/或问题WifiP2pManager.requestPeers().我观察到了这些结果:

  • 没有发现任何对等体,并且在1分钟内没有触发回调.我也通过Android Wi-Fi设置的Wi-Fi Direct部分观察到了这一点.这很奇怪,因为有时发现几乎立即完成.

  • 我有一个Roku设备和电话B坐在电话A旁边.虽然所有设备都连接到我的Wi-Fi,但Roku只出现了~10%的时间,而电话A和B则相互出现.

  • 当我从所有Wi-Fi断开两部手机并进行另一次扫描时,Roku出现了(!!!)但手机B没有,直到我刷新至少十次.

我的两部手机是Nexus 7(运行4.4.4)和Nexus 5(运行5.0).

android wifi-direct wifip2p

5
推荐指数
3
解决办法
4006
查看次数

在Retrofit2上使用HTTPs的SSLProtocolException

我在Android 4.4手机上遇到了一个问题(特别是Galaxy S4,虽然我认为这不是手机本身的错误).使用Retrofit2.Http时,我在HTTPS上连接时收到以下错误:

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x737510d0: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x727fb7d0:0x00000000)
Run Code Online (Sandbox Code Playgroud)

我发现有几个资源表明这是Android 4.4(1)中的一个错误,但给出的示例总是假设使用HttpsUrlConnection类,我没有使用它.

我确实在这里找到了一些关于为连接设置特定ConnectionSpec实例的答案,这似乎很有希望,因为它是特定于Retrofit的(2).不幸的是,这在错误方面没有区别.我的代码示例(我尝试了MODERN_TLS和COMPATIBLE_TLS):

return new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .connectionSpecs(Collections.singletonList(ConnectionSpec.MODERN_TLS))
                .build();
Run Code Online (Sandbox Code Playgroud)

切换到"http"确实有效,但这不是最终版本的选项.绝对需要安全的加密连接,因此任何完全禁用HTTPS或盲目接受任何证书的解决方案都不可能被接受.

提前致谢!

(1)Javax.net.ssl.SSLHandshakeException:javax.net.ssl.SSLProtocolException:SSL握手中止:SSL库失败,通常是协议错误

(2)改进OkHttp SSLHandshakeException

编辑:

运行openssl给出以下内容:

[[my_computer]]$ ./openssl s_client -connect [[server_hidden_by_me]]:443 -tls1


CONNECTED(00000003)
depth=2 /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/OU=Domain Control Validated/OU=PositiveSSL/CN=[hidden_by_me]
   i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation …
Run Code Online (Sandbox Code Playgroud)

ssl android retrofit retrofit2

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