7.25

java主界面

package com.example.musicplayer;

import android.Manifest;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.Toast;

import com.example.musicplayer.seriver.MyService;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";
private LinearLayout SMLinearLayoutBottom;
private Button SMButtonStart;
private Button SMButtonStop;
private Button SMButtonDown;
private Button SMButtonUp;
private ListView SMListView;
private MediaPlayer mp=new MediaPlayer();
private List<Music> list=new ArrayList<>();
private MyAdapter aaa;
private ServiceConnection sc;
private static MyService.MusicBinder binder;
private int num;
private SeekBar sb;

// public static Handler handler=new Handler(){
// @Override
// public void dispatchMessage(Message msg) {
// super.dispatchMessage(msg);
// if(msg.what==110){
// Log.i(TAG, "dispatchMessage: "+msg.what);
// binder.callStop();
// }
// }
// };

public static Handler han=new Handler( ){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SMLinearLayoutBottom = (LinearLayout) findViewById(R.id.SM_linearLayout_bottom);
    SMButtonStart = (Button) findViewById(R.id.SM_button_start);
    SMButtonStop = (Button) findViewById(R.id.SM_button_stop);
    SMButtonDown = (Button) findViewById(R.id.SM_button_down);
    SMButtonUp = (Button) findViewById(R.id.SM_button_up);
    SMListView = (ListView) findViewById(R.id.SM_listView);
    sb=findViewById(R.id.SM_seekBar);

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.pause");
    intentFilter.addAction("com.notify.restart");
    intentFilter.addAction("com.notify.next");
    intentFilter.addAction("com.notify.nav");
    MyReceiver myReceiver = new MyReceiver();
    registerReceiver(myReceiver,intentFilter);
    //开始获取联系人。
    readLinkMan( );

    SMListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            binder.callStart( position);
            num=position;
            Toast.makeText(MainActivity.this, ""+num, Toast.LENGTH_SHORT).show();
        }
    });

    Intent it = new Intent(this, MyService.class);
    startService(it);
    sc=new ServiceConnection(){

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            binder = (MyService.MusicBinder) service;

// binder.setSB(sb);
}

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    //绑定。
    bindService(it,sc, Service.BIND_AUTO_CREATE);

// MyNotification myNotification = new MyNotification(this);
// Notification.Builder show = myNotification.show();
// NotificationManager sss = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
// sss.notify(2,show.build());
}

private void readLinkMan() {
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
        requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},200);
    }else{
        finish();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if( requestCode==200&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
        startRead();
    }
}

private void startRead() {
    list = MyUtils.MyReader(this);
    MyAdapter aaa = new MyAdapter(this, list);
    SMListView.setAdapter(aaa);
}



public void click(View view) {
    switch( view.getId()){
        case R.id.SM_button_start:
                binder.callStart(num);
            break;
        case R.id.SM_button_stop:
            binder.callStop();
            break;
        case R.id.SM_button_down:
            binder.callPlayNextMusic();
            break;
        case R.id.SM_button_up:
            binder.callPlayNavSong();
            break;
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //解绑
    if( sc!=null){
        unbindService(sc);
    }
}

}

自定义对象

package com.example.musicplayer;

public class Music {
private String title;
private String artist;
private String duration;
private String data;

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getArtist() {
    return artist;
}

public void setArtist(String artist) {
    this.artist = artist;
}

public String getDuration() {
    return duration;
}

public void setDuration(String duration) {
    this.duration = duration;
}

public String getData() {
    return data;
}

public void setData(String data) {
    this.data = data;
}

@Override
public String toString() {
    return "Music{" +
            "title='" + title + '\'' +
            ", artist='" + artist + '\'' +
            ", duration='" + duration + '\'' +
            ", data='" + data + '\'' +
            '}';
}

}

适配器

package com.example.musicplayer;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class MyAdapter extends BaseAdapter {
private Context con;
private List list;
private MyId mi;
private int i;

public MyAdapter(Context con, List<Music> list) {
    this.con = con;
    this.list = list;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView==null){
        mi=new MyId();
        convertView= LayoutInflater.from(con).inflate(R.layout.my_layout,null);

        mi.MLTextId=convertView.findViewById(R.id.ML_text_id);
        mi.MLTextTitle = convertView.findViewById(R.id.ML_text_title);
        mi.MLTextArtist = convertView.findViewById(R.id.ML_text_artist);
        mi.MLTextDuration = convertView.findViewById(R.id.ML_text_duration);
        convertView.setTag(mi);
    }else{
        mi= (MyId) convertView.getTag();
    }
    i++;
    mi.MLTextId.setText(i+"");
    mi.MLTextTitle.setText(list.get(position).getTitle());
    mi.MLTextArtist.setText(list.get(position).getArtist());
    mi.MLTextDuration.setText(list.get(position).getDuration());
    return convertView;
}

class MyId{
    private TextView MLTextId;
    private TextView MLTextTitle;
    private TextView MLTextArtist;
    private TextView MLTextDuration;

}

}

服务

package com.example.musicplayer;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyReceiver extends BroadcastReceiver {

private static final String TAG = "MyReceiver";
@Override
public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();
    Log.i(TAG, "onReceive: "+action);
    if(action.equals("com.pause")){
        Log.i(TAG, "onReceive: "+action);

// MainActivity.handler.sendEmptyMessage(110);
}
}
}

工具类获取手机音频

package com.example.musicplayer;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MyUtils {

public static List<Music> MyReader(Context con){
    List<Music> list=new ArrayList<>();
    ContentResolver cr = con.getContentResolver();
    Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor query = cr.query(uri, new String[]{MediaStore.Video.Media.TITLE,
            MediaStore.Video.Media.ARTIST, MediaStore.Video.Media.DURATION,
            MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE}, null, null, null);
    if( query!=null){
        while( query.moveToNext()) {
            String title = query.getString(query.getColumnIndex(MediaStore.Audio.Media.TITLE));
            String artist = query.getString(query.getColumnIndex(MediaStore.Audio.Media.ARTIST));
            String size = query.getString(query.getColumnIndex(MediaStore.Audio.Media.SIZE));
            String data = query.getString(query.getColumnIndex(MediaStore.Audio.Media.DATA));
            String duration = query.getString(query.getColumnIndex(MediaStore.Audio.Media.DURATION));
            Music music = new Music();
            music.setArtist(artist);
            music.setData(data);
            int d_second = Integer.parseInt(duration)/1000;
            int minute = d_second/60;
            int second = d_second%60;
            if( second>0&&second<10) {
                duration = minute + ":0"+second;
            }else if( second>=10&&second<60){
                duration=minute+":"+second;
            }else{
                duration=minute+":00";
            }
            music.setDuration(duration);
            music.setTitle(title);
            list.add(music);
            Log.i("123321", "MyReader: "+music.toString());
        }
    }else{
        Toast.makeText(con, "查找为空。", Toast.LENGTH_SHORT).show();
    }
    return list;
}

}

xml

<?xml version="1.0" encoding="utf-8"?>

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_above="@id/SM_linearLayout_bottom"
    android:id="@+id/SM_seekBar"
    />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/SM_linearLayout_bottom"
    android:orientation="horizontal"
    android:layout_alignParentBottom="true"
    >
    <Button
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="开始"
        android:id="@+id/SM_button_start"
        android:onClick="click"
        />
    <Button
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="暂停"
        android:id="@+id/SM_button_stop"
        android:onClick="click"
        />
    <Button
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="下一首"
        android:id="@+id/SM_button_down"
        android:onClick="click"
        />
    <Button
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="上一首"
        android:id="@+id/SM_button_up"
        android:onClick="click"
        />
</LinearLayout>
<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/SM_listView"
    android:layout_above="@id/SM_seekBar"
    >

</ListView>
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值