曲名やアーティスト名などの音声メタデータを定期的に取得したい。そのために、非同期タスクでメディア メタデータ リトリーバーを使用しています。だから問題は
1) AsyncTask クラスでは、テキストを Taxt-view に割り当てるにはどうすればよいですか。
2)30秒の時間間隔など、特定の時間内にその非同期タスククラスを呼び出すにはどうすればよいですか。
3) 1 日に 1 回だけ取得する必要があるテキストがいくつかあります。では、前回のデータがいつフェッチされたかを確認するにはどうすればよいでしょうか? また、そのフェッチデータを保存してリストビューに使用するための最良の方法はどれですか?(つまり、それをデータベースまたはハッシュマップまたは配列リストに保存する必要がありますか?)
ここにメタデータ取得コードがあります
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.afragment, container, false);
}
@Override
public void onStart() {
super.onStart();
initfrag();
}
private void initfrag() {
// TODO Auto-generated method stub
lv1=(ListView)getView().findViewById(R.id.list);
tv=(TextView)getView().findViewById(R.id.tv1);
tv1=(TextView)getView().findViewById(R.id.tv2);
LongOperation task=new LongOperation();
task.execute();
}
class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
String link = "http://xyz-radio-link.ogg";
metaRetriever.setDataSource(link, new HashMap<String, String>());
// get mp3 info
title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
artist = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
metaRetriever.release();
refreshtext();
return null;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
public void refreshtext() {
// TODO Auto-generated method stub
Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Roboto-Regular.ttf");
tv.setTypeface(tf);
tv1.setTypeface(tf);
tv.setText(artist);
tv1.setText(title);
}