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音樂播放器
沒停過。。。來那個經驗分