我遇到了将音乐整合到我的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
我有一个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 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活动时将辅助显示器恢复为镜像.但我也没有办法做到这一点.再次感谢您的任何建议.
我正试图站起来通过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应用程序使用计时器每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上遇到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()回调不起作用?什么可能导致它在一个设备上工作,但在另一个设备上失败?谢谢.
我正在将一些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
我在使用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?
非常感谢!