A. Android开发,简单的音乐播放器的完整代码,含布局的。
手机设为离线模式不是无法定位,而是需要较长的时间,导航时手机会内寻找卫星,但容是,如果没有辅助定位(A-GPS)的帮助,它会浪费很多时间去找合适的卫星,而使用A-GPS就需要通讯网络的支持,它能够先计算你所在的大概位置,然后就有针对性地搜索卫星,快很多。
而车载导航仪就属于专业、专门的设备,接收能力和功率等硬件设计都可以使其很方便和很专业地搜索卫星,即使卫星信号不太好,也能搜得到。它们的工作原理大致相同,只是功率和所使用的软件不同
B. android 音乐播放器程序必须得用broadcast吗
是的,下面是核心代码:
package com.siyehualian.musicplay;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
// ListView
private ListView listView;
// 适配器
private SimpleAdapter adapter;
// 数据源
private ArrayList<hashmap<string, string="">> list;
// 当前播放的曲目
private int currentPositionMusic = -1;
// 上一首
private ImageButton lastImageButton;
// 播放
private ImageButton playImageButton;
// 下一首
private ImageButton nextImageButton;
// 循环
private ImageButton loopImageButton;
// 播放进度
private SeekBar playSeekBar;
// 当前播放曲目
private TextView currentPlayingSong;
// 是否是第一次进来
private boolean ifFirstIn = true;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
lastImageButton = (ImageButton) findViewById(R.id.imagebutton_previous);
playImageButton = (ImageButton) findViewById(R.id.imagebutton_play);
nextImageButton = (ImageButton) findViewById(R.id.imagebutton_next);
loopImageButton = (ImageButton) findViewById(R.id.imagebutton_loops);
playSeekBar = (SeekBar) findViewById(R.id.seekbar_play);
currentPlayingSong = (TextView) findViewById(R.id.textview_songinformation);
list = new ArrayList<hashmap<string, string="">>();
adapter = new SimpleAdapter(this, list, R.layout.list_item,
new String[] { "title" }, new int[] { R.id.textview_item });
listView.setAdapter(adapter);
// 为listView设置监听器
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<!--?--> arg0, View arg1,
int position, long arg3) {
try {
currentPositionMusic = position;
playMusic();
} catch (Exception e) {
e.printStackTrace();
}
}
});
lastImageButton.setOnClickListener(this);
playImageButton.setOnClickListener(this);
nextImageButton.setOnClickListener(this);
loopImageButton.setOnClickListener(this);
playSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser) {
// 改变进度条
intent = new Intent("changed");
intent.putExtra("seekbarprogress", progress);
startService(intent);
}
}
});
}
private void playMusic() {
// 启动播放音乐的服务
intent = new Intent("play");
intent.putExtra("uri", ((HashMap<string, string="">) list
.get(currentPositionMusic)).get("path"));
intent.putExtra("title", ((HashMap<string, string="">) list
.get(currentPositionMusic)).get("title"));
startService(intent);
// 把图片改为播放的图片
playImageButton.setImageResource(R.drawable.play);
// 同时更改SeekBar的进度,因为进度是不断变化的,所以需要一个子线程来刷新下
// playSeekBar.setMax(mp.getDuration());
// 设置当前播放曲目信息
currentPlayingSong.setTextColor(Color.GREEN);
currentPlayingSong.setText(list.get(currentPositionMusic).get("title"));
}
@Override
protected void onResume() {
super.onResume();
// 得到所有音频
if (ifFirstIn) {
ifFirstIn = false;
scanMusic();
}
// 动态注册广播
IntentFilter filter = new IntentFilter();
filter.addAction("seekbarmaxprogress");
filter.addAction("seekbarprogress");
filter.addAction("playNextSong");
filter.addAction("pause");
filter.addAction("setplay");
filter.addAction("stoploop");
filter.addAction("startloop");
registerReceiver(broadcastReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 关闭通知
intent = new Intent("stopnotification");
startService(intent);
// 停止服务
stopService(intent);
// 取消广播的注册
unregisterReceiver(broadcastReceiver);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("你确定要退出吗?");
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
/**
* 得多所有的音频
*/
private void scanMusic() {
// 置空list集合中的所有元素,放置反复启动导致的数据重复,其实这个部分是因为每次进来都会重新获得焦点,执行onResume造成的
// 这个修改虽然可以,但是每次进来都有重新加载,增加了手机的符合,所以可以设置一个标志,只有在第一进来的时候才会加载数据
// list.clear();
new Thread() {
public void run() {
Cursor cursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
while (cursor.moveToNext()) {
String title = cursor
.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
String path = cursor
.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
String size = cursor
.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
if (Long.parseLong(size) > 1024 * 1024) {
HashMap<string, string=""> hashMap1 = new HashMap<string, string="">();
hashMap1.put("title", title);
hashMap1.put("path", path);
list.add(hashMap1);
}
}
cursor.close();
};
}.start();
}
/**
* 监听
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imagebutton_previous:
playLastSong();
break;
case R.id.imagebutton_play:
intent = new Intent("clickplay");
startService(intent);
break;
case R.id.imagebutton_next:
playNextSong();
break;
case R.id.imagebutton_loops:
intent = new Intent("loops");
startService(intent);
break;
default:
break;
}
}
// 设置当前歌曲为前一首
currentPositionMusic--;
try {
// 播放前一首歌曲
playMusic();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 广播对象,动态注册,用来接收从Service传过来的消息,根据不同的消息做不同的事情
*/
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
C. androidwidget有用吗
1.身材微:它们一般都很小,在终端上嵌入非常方便,运行快速。
2.形式多:Widget可以以多种形式呈现出来,幻灯秀、视频、地图、新闻、小游戏……
3.功能巨:别看它们小,却服务周到,它可以为你报告新闻、帮你买东西、列出你最喜欢的乐队,还有你最近看的视频。另外,它还是一个殷勤的管家,你不必亲自去Flickr或者天气预报网站,Widget会将信息主动带给你。
4.姿容丽:它们可以称得上玉面飞龙、以色服人。只要你愿意,你可以把它变成任何你想要得样子。它的出现,无异于一枚“桌面炸弹”,狭窄而单调的IE窗口将被更为广阔和绚丽的桌面空间所取代。
5.个性化:Widget更像一个属于我们每个人的魔方,任由用户聚合。你可以根据自己喜好,将多个Widget,随心所欲的去精心组装你的网络世界。通过Widget,可以用户把一切在“网”中的内容打乱重来,并按照用户希望看到的样子重新排列组合一个属于自己的互联网。比如说一个由微件搭建个人空间,可以包括来自新浪的体育新闻,来自论坛的一个板块,来自权威财经网站的一则随时更新的股票信息 ——这些以往需要用户同时分别进入几个网站才能看到的信息,现在由一个个微件将其转变为用户个人空间的一部分,从而可以直接在同一个页面中并存。传统互联网访问方式处于分裂状态的后Web2.0时期,多样性、炫酷且更具个性化的Widget流行,或许能引领一个新的潮流。
6.易制作:制作 Widget 部件并不复杂,只需要熟悉三方面的知识:图像处理、HTML/XML、java,就可以按照开发站点里的教程做出漂亮的部件来。Widget能够流行的一个要点在于开放制作,UGC应用带来爆炸式地增长。
那么,什么是android widget呢?
在Android 1.5 SDK preview中,我们看到了一系列功能和API上的变化变化,包括软键盘、桌面Widget和Live Folder API、视频录制API,蓝牙功能升级等,Google近来对于这些全新功能的解析使得Android开发者blog变得异常活跃。上周,Jeff Sharkey就有一篇对于Android桌面widget和AppWidget框架的简介,以“Word of the day”的一个例子讲述了桌面Widget的运作机制。昨天他又在个人blog上放出了一个天气预报Widget的例子,事实上这已经是一个真正实用的程序了。它每天更新4次天气预报,我们可以添加多个Widget来关注多个城市的天气情况,另外,点击Widget后我们还可以看到今后几天的详细预报。
这让我想起了HTC Source的Nick Gray上周的一篇文章Android Widgets, Unlimited Potential中提到的几类可能会大受欢迎的Android桌面Widget。
Android本身已经自带了时钟、音乐播放器、相框和Google搜索4个Widget程序,不过这并不能阻止大家开发自己更加美观,功能更丰富的版本。另外,微博客、RSS订阅、股市信息、天气预报这些Widget也都有流行的可能。
微博客Widget:Twidroid是Android上迄今为止最棒的Twitter客户端,大家显然都期待着它会推出支持桌面Widget的版本,另外像国内比较受欢迎的饭否、嘀咕、叽歪等应该也会有类似的Widget推出。对于一个微博客类的Widget来说,有两个方面是必不可少的,一是用来发布消息,另一个则是用来浏览。
RSS订阅Widget: 尽管微博客(尤其是Twitter)已经完全盖过来RSS订阅的风头,越来越多的人用Twitter来跟踪站点的更新,不过RSS订阅也并非完全没有了市场,像分类订阅这样的功能还是需要RSS来帮忙,另外站点管理员也未必会在Twitter上发布所有的更新。
股市信息Widget:对于炒股的人来说,大概没有什么能比在手机桌面上放上几个所关注股票的实时股价更有运筹帷幄的感觉了吧。
天气预报Widget:对于我这样成天窝在办公室或者家里的人来说,有一个Widget能够让我了解当前的天气和近1、2天的天气是非常有用的,这大概会大大减少我下了楼又跑回去拿雨伞的几率。如果能加上像TouchFLO 3D中那样的UI效果,当然就更酷了。
这只是我现在想到的一些Widget,得益于Android 1.5为我们提供的Widget API为我们的手机桌面带来的无限的可能,我们的手机桌面无疑将会更有趣。
对国内G1的用户,如果想体验Android 1.5的桌面Widget,可以看看Haykuro的blog,他正在为制作G1可用的Android 1.5 ROM而努力。另外,T-Mobile已经计划在五月向德国的T-Mobile G1用户推送1.5的更新了,所以即使到时候没有官方的G1简体中文1.5 ROM,相信Haykuro的 1.5 ROM for G1也能非常接近官方的成熟度。
Widget应用目前在Android手机上得到了广泛的应用。由于其方便小巧,所以得到了很多的应用,像天气,微博,信息,歌曲,时间等等。
关于android Wpp widget:
应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget provider来发布一个Widget。可以容纳其它App Widget的应用程序组件被称为App Widget宿主。下面的截屏显示了一个音乐App Widget。
D. android系统中的音乐播放器的控制按钮是一个什么控件
桌面的插件,详情可以登录案桌的国内网站和论坛,推荐安置和机锋网!,91助手也不错
E. 这这程序为什么运行不了,android音乐播放器问题
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.MediaController;
import android.widget.VideoView;
import android.content.pm.ActivityInfo;
import android.content.res.AssetManager;
public class VideoPlayer extends Activity implements MediaPlayer.OnErrorListener,
MediaPlayer.OnCompletionListener {
public static final String TAG = "VideoPlayer";
private VideoView mVideoView1;
private Uri mUri;
private int mPositionWhenPaused = -1;
private MediaController mMediaController;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set the screen to landscape.
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mVideoView1 = (VideoView)findViewById(R.id.video_view);
// Video file
mUri = Uri.parse("/1.mp3");
// Create media controller
mMediaController = new MediaController(this);
mVideoView1.setMediaController(mMediaController);
}
public void onStart() {
// Play Video
mVideoView1.setVideoURI(mUri);
mVideoView1.start();
super.onStart();
}
public void onPause() {
// Stop video when the activity is pause.
mPositionWhenPaused = mVideoView1.getCurrentPosition();
mVideoView1.stopPlayback();
Log.d(TAG, "OnStop: mPositionWhenPaused = " + mPositionWhenPaused);
Log.d(TAG, "OnStop: getDuration = " + mVideoView1.getDuration());
super.onPause();
}
public void onResume() {
// Resume video player
if(mPositionWhenPaused >= 0) {
mVideoView1.seekTo(mPositionWhenPaused);
mPositionWhenPaused = -1;
}
super.onResume();
}
public boolean onError(MediaPlayer player, int arg1, int arg2) {
return false;
}
public void onCompletion(MediaPlayer mp) {
this.finish();
}
}
我的是正常的
F. 求用android做一个音乐播放器的代码
你在网络里面搜索“安卓巴士”,里面有大量Android应用的源码!不过没有ppt。 里面也有你想要的平台音乐播放器源码。
G. me widget中的音乐播放器没有反应
任务管理器中 (任务栏右击 可以看到) 应用程序选项卡
H. appwidget音乐播放器
没停过。。。来那个经验分