小编Jua*_*ana的帖子

将视频插入MediaStore

我正在尝试插入视频MediaStore,就像使用此方法存储图像一样:

MediaStore.Images.Media.insertImage(getContentResolver(), imagePath, null, null)
Run Code Online (Sandbox Code Playgroud)

由于没有类似的方法MediaStore.Video.Media,我尝试做的是插入一条记录MediaStore.Video.Media.EXTERNAL_CONTENT_URI,然后将文件复制到目的地,如下所示:

ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.TITLE, "Title1");
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
values.put(MediaStore.Video.Media.DATA, videoPath);
Uri uri = cr.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);

try {
    OutputStream os = cr.openOutputStream(uri);
    ...
    ...
} (FileNotFoundException e) {
    cr.delete(uri, null, null);
}
Run Code Online (Sandbox Code Playgroud)

uri返回的non-null的形式content://media/external/video/media/{id},这似乎是正确的.

但是当cr.openOutputStream(uri);被激活时,会FileNotFoundException被抛出.

最后一点类似于Image.Media.insertImage查看其源代码所做的操作.

顺便说一句,我确实得到了WRITE_EXTERNAL_STORAGE许可.另外,我正在测试4.3和4.4.

video android mediastore android-contentresolver

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

不推荐使用PagerAdapter.instantiateItem()方法

我很好奇为什么instantiateItem被弃用以支持它的新版本.变化是它现在接受ViewGroup而不是更普遍View.

不推荐的方法

public Object instantiateItem (View container, int position)
Run Code Online (Sandbox Code Playgroud)

新方法

public Object instantiateItem (ViewGroup container, int position)
Run Code Online (Sandbox Code Playgroud)

注意:这种变化也发生在destroyItem,startUpdate,finishUpdatesetPrimaryItem.

android android-pageradapter

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

ScrollView上的YouTubePlayerView

首先,我想指出Android中似乎有一个限制,其中有一个SurfaceViewon ScrollView不能像你期望的那样工作.这在这里解释 (内部VideoView使用,SurfaceView所以它有这个问题).但似乎是一个解决方法VideoView它为我工作.

现在,我还想使用新的Android API for Android在我们的Android应用中显示嵌入的YouTube视频.的YouTubePlayerView作为层次结构中的观看者示出低于其也实现了嵌入式视频播放器呈现以上,因为它使用一个SurfaceView提到的问题.

YouTubePlayerView上的SurfaceView

我无法找到解决此问题的方法.有一个YouTubePlayerViewScrollView是一个相当普遍的情况下使用我们的应用程序(也可能是其他许多人太).我将不胜感激任何评论.

android youtube-api android-scrollview android-youtube-api

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

由于缺少依赖性,Kotlin buildSrc在Gradle 4.10上失败

升级到Gradle 4.10时,我在尝试编译时遇到以下错误:

Execution failed for task ':buildSrc:compileKotlin'.
> Could not resolve all files for configuration ':buildSrc:kotlinCompilerPluginClasspath'.
   > Could not find org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.2.60.
     Searched in the following locations: file:/Users/<user-name>/.gradle/caches/4.10/embedded-kotlin-repo-1.2.60-2/repo/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.2.60/kotlin-scripting-compiler-embeddable-1.2.60.jar
     Required by:
         project :buildSrc
   > Could not find org.jetbrains.kotlin:kotlin-sam-with-receiver:1.2.60.
     Required by:
         project :buildSrc
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用buildSrcGradle编译过程.

gradle kotlin gradle-kotlin-dsl

5
推荐指数
2
解决办法
1010
查看次数

使用PyCharm绘制龟(python)

我正在运行最新的PyCharm Pro版本并尝试从暂存文件运行以下代码,但它似乎不起作用

import turtle

wn = turtle.Screen() 
alex = turtle.Turtle()
alex.forward(150)  
alex.left(90) 
alex.forward(75)
Run Code Online (Sandbox Code Playgroud)

通过不工作我的意思是,没有窗口弹出,但我确实在输出说

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

任何的想法

  1. 如果可以通过PyCharm完成
  2. 我在配置方面缺少什么

干杯

python turtle-graphics pycharm

4
推荐指数
2
解决办法
2万
查看次数

关闭碎片的正确方法

这个问题有两个部分。

假设我们有一个Activity,然后有两个片段:一个ListFragment和一个Fragment(当您从ListFragment中单击一个项目时将显示它们)。

第1部分

我应该在哪里关闭片段?我的意思是从设计的角度来看是好的。我看到两种选择:一种是在片段中声明一个接口,然后由活动来实现它,我们将其称为closeFragment()。这将是一种从片段到活动进行通信的方式,如开发站点中所示。另一个可能很简单,它调用getActivity()。getSupportFragmentManager()并使用管理器将其关闭。

第2部分

我知道如何创建片段并将其替换,因为它位于开发站点上,但是我对关闭片段存有疑问。我实际上应该如何关闭它?以下代码是否正确?假设该片段已添加到BackStack。

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
getSupportFragmentManager().popBackStack();
transaction.remove(this);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

非常感谢你。

android android-fragments

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

在 BroadcastReceiver 的 onReceive() 方法中创建 Toast

如您所知,BroadcastReceiver 类的 onReceive() 方法的文档说:

当它在主线程上运行时,您永远不应该在其中执行长时间运行的操作(在考虑接收器被阻塞和候选者被杀死之前,系统允许有 10 秒的超时时间)。您无法在 onReceive() 的实现中启动弹出对话框。

我想在收到广播时向用户显示 Toast,但我不确定 Toast 是否被视为“弹出对话框”,或者只有 Dialog 类中的对象才是它们所指的对象。

我见过许多在该函数中使用 Toast 的代码示例,但我不确定这是否是不好的做法,或者是否会对性能产生很大影响。

我想知道的是我是否应该在这个函数中创建一个Toast,如果不是那么我应该怎么做(扩展Toast然后使用意图来调用它?)。

android broadcastreceiver toast

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