小编gcl*_*cl1的帖子

如何让用户在Android上查看和播放他们已经访问过的歌曲(例如,通过Google Play)?

我遇到了将音乐整合到我的Android应用中的障碍.目标只是让用户通过Google Play音乐(或任何其他播放器,如Winamp,Poweramp,doubleTwist等)查看和播放他们已经访问过的歌曲.

到目前为止,我已经尝试了几种方法,但每种方法都存在问题.

方法#1:使用ContentResolver查询从Google Play音乐中获取播放列表和歌曲,然后使用MediaPlayer播放

首先,在播放列表上获取光标:

String[] proj = { MediaStore.Audio.Playlists.NAME,
                  MediaStore.Audio.Playlists._ID };
Uri playlistUri = Uri.parse("content://com.google.android.music.MusicContent/playlists");
Cursor playlistCursor = getContentResolver().query(playlistUri, proj, null, null, null);
Run Code Online (Sandbox Code Playgroud)

然后迭代以获取每个播放列表中的歌曲,并按如下方式读取它们:

String[] proj2 = { MediaStore.Audio.Playlists.Members.TITLE,
                   MediaStore.Audio.Playlists.Members._ID };
String playListRef = "content://com.google.android.music.MusicContent/playlists/" + playListId + "/members";
Uri songUri = Uri.parse(playListRef);
Cursor songCursor = getContentResolver().query(songUri, proj2, null, null, null);
Run Code Online (Sandbox Code Playgroud)

这可以获取播放列表和歌曲,但实际上您无法播放它们(即使您将Google Play音乐告诉"保留在设备上").具体来说,以下代码不播放如上所示的给定歌曲:

mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
    mediaPlayer.setDataSource(dataPath);
    mediaPlayer.prepare();
    mediaPlayer.start();
} catch (Exception e) {}
Run Code Online (Sandbox Code Playgroud)

事实上,我已经扫描了设备,并且无法在任何地方找到这些文件(尽管我已经通过完全禁用网络确认它们是本地的 - 在Galaxy Nexus和Galaxy S3上).

方法#2:使用Intent调用Google Play音乐或其他播放器

根据这篇文章,您可以使用Intents简单地调用播放器,如下所示: …

android android-intent android-music-player android-contentprovider google-play

7
推荐指数
1
解决办法
2440
查看次数

如何阻止Android ViewFlipper循环?

我有一个ViewFlipper设置为每5秒自动翻转一次.省略一些细节,它看起来像这样,工作正常:

ViewFlipper flipper = (ViewFlipper) findViewById(R.id.myflipperid);

flipper.setFlipInterval(5000);                              
flipper.setInAnimation(inFromRightAnimation());
flipper.setOutAnimation(outToLeftAnimation());

flipper.startFlipping();
Run Code Online (Sandbox Code Playgroud)

但是,我有一个案例,我希望自动翻转停在最后一个视图,而不是循环重新开始.ViewFlipper或它继承的任何类都没有循环控制方法.

如何让ViewFlipper在击中最后一个子视图时停止循环查看子视图?

注意:这里给出的答案不适用于我的情况,因为我需要在其列表的末尾捕获ViewFlipper,即不依赖于用户输入.谢谢.

android android-animation android-view

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

Android辅助显示 - 跨活动调用的持久性

我使用Android MediaRouter(API 16)和Presentation(API 17)类来生成和管理辅助显示.我按照ApiDemos中的示例创建了独特的非镜像输出,到目前为止它工作正常(使用通过HDMI线连接到HDTV的Nexus 10进行测试).

现在,我有一种情况,我希望创建的Presentation对象Activity X继续在辅助显示器上运行,即使Activity X调用另一个Activity Y.在这种情况下,Activity X仍然在堆栈上,但Activity Y现在是在它上面.

问题是,Activity Y启动时,物理辅助显示器将恢复镜像.当我退出时Activity Y,Activity X's演示文稿的内容会回来(因为我从未打过dismiss()它).

所以问题是:即使在本地设备上运行从属活动,如何将演示文稿附加到该显示器上运行的辅助显示器上?

更新:我想到的一种方法是Presentation从后台线程实例化对象; 然后,另一个的后续创建Activity不应该干扰后台线程写入其Presentation对象的内容.但我不确定这是否可行,因为通常不允许从后台线程更新UI.

另一种方法是Activity如果可能的话,禁止下级使用辅助显示器,从而防止它在新的Activity活动时将辅助显示器恢复为镜像.但我也没有办法做到这一点.再次感谢您的任何建议.

multithreading android hdmi android-activity

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

Android相机Intent在RESULT_OK情况下不返回

我正试图站起来通过Intents使用相机的简单Android应用程序.代码与Android文档中的代码非常相似,但它对我不起作用.

在调用startActivityForResult()之后,相机应用程序会按预期打开,但在我拍完照片后它永远不会返回(?!).具体来说,在我拍照并选择接受图标(Galaxy Nexus上的复选标记)后,它不会返回.但是在我选择取消图标(同一部手机上的"X")后它确实会返回.

这是代码(请注意,我正在使用Fragment,而不是Activity):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.my_layout, container, false);

    final Button btnCamera = (Button) view.findViewById(R.id.cameraid);

    View.OnClickListener handler = new View.OnClickListener() {
        public void onClick(View v) {
            if (v == btnCamera) {
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                // create a file to save the image
                File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
                imagesFolder.mkdirs();
                File image = new File(imagesFolder, "image_001.jpg");
                Uri uriSavedImage = Uri.fromFile(image);

                // start the image capture Intent …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-camera

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

Android错误:"无法创建epoll实例"或"无法创建唤醒管道"

我有一个Android应用程序使用计时器每5-10秒调用一次AsyncTask(使用java.util.Timer和java.util.TimerTask).AsyncTask从Amazon AWS S3数据库获取图像数据,并为主UI活动加载ImageView.

这工作正常一两个小时,但后来我得到一个神秘的错误消息,应用程序被杀死.错误消息来自"Looper"并说:

Could not create epoll instance.  errno=24
Run Code Online (Sandbox Code Playgroud)

要么

Could not create wake pipe
Run Code Online (Sandbox Code Playgroud)

在网上搜索似乎表明问题可能与文件描述符有关(太多的打开文件描述符?).我已经浏览了代码,但没有看到任何文件,流或连接未关闭的地方.

当应用程序被杀死时,logcat会从AndroidRuntime发出一条消息:

FATAL EXCEPTION: main
Run Code Online (Sandbox Code Playgroud)

有没有人知道这些消息,或如何解决?谢谢!

android timer amazon-s3 timertask android-asynctask

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

GCM Android:未调用onRegistered()

我在Android上遇到GCM问题.它无法onRegistered()在我的一个测试设备(Droid2)上执行回调或返回一个好的regId - 但它在另一个设备(Galaxy Nexus)上运行得非常好.

我在这里遵循基本的例子.调用者看起来像这样:

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);

final String regId = GCMRegistrar.getRegistrationId(this);

if (regId.equals(""))
    GCMRegistrar.register(this, Constants.SENDER_ID);
else
    Log.v(TAG, "Already registered");
Run Code Online (Sandbox Code Playgroud)

我的清单有这样的:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

<receiver
    android:name="com.google.android.gcm.GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.gcl.myapp" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

为什么onRegistered()回调不起作用?什么可能导致它在一个设备上工作,但在另一个设备上失败?谢谢.

notifications android google-cloud-messaging

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

为什么Android Facebook界面不能与Fragments一起使用?

我正在将一些Android Facebook代码从一个转换Activity为一个Fragment.在切换之前一切正常,但现在onComplete()回调没有被执行.

Facebook代码不能与Fragments一起使用,或者我做错了什么?

这是原始代码(在a中SherlockActivity):

if (!mFacebook.isSessionValid()) {
    mFacebook.authorize(MyActivity.this, permissions, new DialogListener() {
        @Override
        public void onComplete(Bundle values) { ... }    // CALLED AS EXPECTED
    }
}
Run Code Online (Sandbox Code Playgroud)

这是新代码(在SherlockFragment中):

if (!mFacebook.isSessionValid()) {
    mFacebook.authorize(getActivity(), permissions, new DialogListener() {
        @Override
        public void onComplete(Bundle values) { ... }    // DOES NOT GET CALLED
    }
}
Run Code Online (Sandbox Code Playgroud)

Activity和Fragment都包含与Facebook要求相同的onActivityResult():

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    mFacebook.authorizeCallback(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助! …

android facebook-android-sdk android-fragments actionbarsherlock fragmentpageradapter

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

Actionbar Sherlock:无法解析Menu和MenuItem导入

我在使用Actionbar Sherlock 4.0时遇到了一些问题.我按照http://www.youtube.com/watch?feature=player_embedded&v=4GJ6yY1lNNY中的步骤进行了操作,这看起来非常清楚,但我无法让它干净利落地构建.

第一个问题涉及我的Activity对onCreateOptionsMenu()和onOptionsItemSelected()的覆盖.我从Unable中了解到在ListFragment重写onCreateOptionsMenu需要更改导入

import android.view.Menu;
import android.view.MenuItem;
Run Code Online (Sandbox Code Playgroud)

import android.support.v4.view.Menu;
import android.support.v4.view.MenuItem;
Run Code Online (Sandbox Code Playgroud)

但Eclipse并没有拿起新的Menu和MenuItem定义,即使我已将android-support-v4.jar放入我项目的libs目录中.任何想法为什么这不起作用?

其次,设置教程说可以使用Android SDK 4.0构建Actionbar Sherlock,但我也看到Actionbar Sherlock和你的项目都必须用Android SDK 3.2编译才能获得适当的支持(使用ActionBarSherlock库时出错,使用sherlock作为库).任何人都可以澄清是否需要旧的SDK?

非常感谢!

android actionbarsherlock android-actionbar

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