我有一个整个文件夹结构,我想从我的资产文件夹中复制.但是,mContext.getAssets().open()似乎只需要一个文件名,以便它可以返回一个InputStream,它只适用于复制单个文件.我需要的是从我的资源文件夹中的文件夹创建的文件,以便我可以递归所有文件和文件夹并将它们全部复制.
有没有人知道如何获取assets文件夹的路径,以便我可以创建一个File对象?
编辑:经过一些研究后,您似乎无法使用绝对路径访问assets /和raw/folders中的文件,以便能够创建File对象.它可能与应用程序包的加密有关.我希望有人能证明我错了!
最后编辑:我最终创建了一个字符串数组来保存额外的资产文件:
private static final String[] DEFAULT_ALBUM_FILES =
{INTRO_TO_FLASHUM_DIR+"03 Never Can Say Goodbye.m4a",
INTRO_TO_FLASHUM_DIR+"11 Bossa Baroque.m4a",
INTRO_TO_FLASHUM_DIR+"intro fling.3gp"};
Run Code Online (Sandbox Code Playgroud)
然后,我使用mContext.getAssets().open()单独复制每个文件以获取InputStream.我认为目前不可能使用普通的文件操作迭代资产中的文件夹.
我有一个(Sherlock)FragmentActivity和2个标签片段.左边的片段是一个显示相册图片的GridView,右边的片段包含一个用于查看单个图片的ViewPager.从左侧片段中,您可以滚动图片并选择一个.对正确片段进行跳格(或滑动)将显示图片,因为它是ViewPager,您可以滑动到上一张或下一张图片.
除了FragmentActivity想拦截右侧滑动并向后移动到左侧选项卡之外,这种方法效果很好.当我在右侧选项卡上时,我想阻止FragmentActivity拦截滑动.如果我不得不完全禁用标签之间的滑动,那将是令人满意的.我只想将滑动专用于当前选项卡而不是用于在选项卡之间移动.
以下图像表示当前行为.右图显示了向右滑动时发生的情况.如您所见,左侧标签开始出现.我希望滑动仅应用于右侧选项卡,以便我可以在图像之间滑动而不显示左侧选项卡.

我看到了在ViewPager中控制滑动的解决方案,但还没有找到控制选项卡片段之间滑动的解决方案.
这是GridView片段和ViewPager片段的xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="100dip"
android:gravity="center"
android:horizontalSpacing="4dip"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="4dip" />
</FrameLayout>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这里是ViewPager片段的代码摘要:
public class FragmentFlash extends SherlockFragment {
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
private ViewPager pager = null;
private int pagerPosition;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pagerPosition = 0;
// Gesture detection
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = …Run Code Online (Sandbox Code Playgroud) 我的Android应用需要向我的服务器发送授权代码,以便服务器可以使用该代码获取用户的Google云端硬盘帐户的访问令牌.我一直试图弄清楚如何获取授权代码,我在Google API文档中找到了这一点(使用OAuth 2.0 for Installed Applications):
此序列首先将浏览器(系统浏览器或作为Web视图嵌入在应用程序中)重定向到带有一组查询参数的Google URL,该参数指示应用程序所需的Google API访问类型.与其他方案一样,Google处理用户身份验证和同意,但序列的结果是授权代码.授权代码在浏览器的标题栏中返回,或作为查询字符串参数返回(取决于请求中发送的参数).
在接收到授权代码之后,应用程序可以交换访问令牌和刷新令牌的代码.应用程序在此交换过程中显示其client_id和client_secret(在应用程序注册期间获取)和授权代码.收到刷新令牌后,应用程序应将其存储以备将来使用.访问令牌使您的应用程序可以访问Google API.
现在我不知道如何在我的Android应用程序中获取此授权代码,因为我看到的Android示例似乎直接获得了访问令牌.我正在查看Android AccountManager类,它有一个getAuthToken方法,但这似乎是指访问令牌而不是授权代码.
那么如何获得可以与服务器共享的授权代码呢?如果有可能,我会非常感谢一些示例代码.如果不可能,可能的解决方法是什么?
我仔细遵循了从Eclipse到Android Studio的迁移指南,我得到的唯一错误是"无法解决符号常见问题",并且正在以下行中发生:
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生这种情况?
我使用上面描述的代码和方法为Android构建了ffmpeg
https://github.com/halfninja/android-ffmpeg-x264
使用在Windows上的VirtualBox中运行的Ubuntu.然后我将libvideokit.so复制到所提供项目的Windows副本的Project\libs\armeabi文件夹中.从那里我可以在我的Android设备上运行Eclipse的ProjectTest.我可以看到正在执行的ffmpeg代码,但是当它到达打开输入文件时,它会给出指示的错误.我注意到了一些关于这个问题的讨论
Android上的FFMpeg,未定义的对libavcodec函数的引用,尽管它在命令行中列出
但是解决方案没有帮助,因为在这个版本中启用了文件协议,我也尝试在文件路径前放置"file:"无济于事.为了完整性,我尝试设置minimal_featureset = 0来启用所有默认值,但这给了我同样的错误.下面是来自Eclipse的logcat的快照,显示了Videokit的输出,并额外调用了LOGE以显示av_open_input_file的结果.任何有关尝试的建议都将不胜感激.
10-23 11:57:33.888: DEBUG/Videokit(4830): run() called
10-23 11:57:33.888: DEBUG/Videokit(4830): run passing off to main()
10-23 11:57:33.904: DEBUG/Videokit(4830): main(): registering all modules
10-23 11:57:33.927: DEBUG/Videokit(4830): main(): registered everything
10-23 11:57:33.927: DEBUG/Videokit(4830): main(): initting opts
10-23 11:57:33.943: DEBUG/Videokit(4830): main(): initted opts.
10-23 11:57:33.943: ERROR/Videokit(4830): ffmpeg version N-30996-gf925b24, Copyright (c) 2000-2011 the FFmpeg developers
10-23 11:57:33.943: ERROR/Videokit(4830): built on Oct 21 2011 13:54:03 with gcc 4.4.3
10-23 11:57:33.943: ERROR/Videokit(4830): configuration: --enable-cross-compile --arch=arm5te --enable-armv5te --target-os=linux --disable-stripping --prefix=../output --disable-neon …Run Code Online (Sandbox Code Playgroud)