2015-10-16 78 views
2

从项目升级后无法找到类'android.support.v7.app.NotificationCompat $ Builder' v4

我正在尝试使用通知来管理我的mediaplyaer控件。

我需要为我的项目使用android.support.v7.app.NotificationCompat,以便根据此问题进一步研究锁屏控制。

https://stackoverflow.com/a/31013955/3126760

我已经更新我的支持库23.0.1

当我尝试建立下面的代码

public class player6 extends Service implements OnCompletionListener, 
     OnPreparedListener, OnErrorListener, OnSeekCompleteListener, 
     OnInfoListener, OnBufferingUpdateListener { 
    final int NOTIFICATION_ID = 1; 
    public static final String EXTRA_AUDIO_URL = "audio_url"; 
    public static final String BROADCAST_PLAYBACK_STOP = "stop", 
      BROADCAST_PLAYBACK_PAUSE = "pause", 
      BROADCAST_PLAYBACK_NEXT = "next", 
      BROADCAST_PLAYBACK_PREVIOUS = "previous", 
      BROADCAST_PLAYBACK_SHUFFLE = "shuffle", 
      BROADCAST_PLAYBACK_REPEAT = "repeat"; 
    int song_aLBUM; 
    private boolean isShuffle = false; 
    private boolean isRepeat = false; 
    ArrayList<String> songs; 
    Cursor cursor; 
    Uri uri; 
    Bundle b; 
    private int index; 
    Button play, next, back, eqaulize; 
    ArrayList<String> MultilistArray; 
    MediaPlayer mediaPlayer; 
    String url; 
    String x; 
    // seekbar variables for processing 
    String sntSeekPos; 
    int intSeekPos; 
    int mediaPosition; 
    int mediaMax; 
    private final Handler handler = new Handler(); 
    private static int songEnded; 
    public static final String BROADCAST_ACTION = "com.example.classanimate.seekprogress"; 
    Intent bufferIntent; 
    Intent seekIntent; 
     //lolipop 
     private MediaSessionManager mManager; 
     private MediaSession mSession; 
     private MediaController mController; 



    final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (action.equals(BROADCAST_PLAYBACK_STOP)) 
       stopSelf(); 
      else if (action.equals(BROADCAST_PLAYBACK_PAUSE)) { 
       if (mediaPlayer.isPlaying()) 
        mediaPlayer.pause(); 
       else 
        mediaPlayer.start(); 
      } else if (action.equals(BROADCAST_PLAYBACK_NEXT)) { 
       playnext(); 
      } else if (action.equals(BROADCAST_PLAYBACK_PREVIOUS)) { 
       playprevious(); 
      } else if (action.equals(BROADCAST_PLAYBACK_SHUFFLE)) { 
       playShuffle(); 
      } else if (action.equals(BROADCAST_PLAYBACK_REPEAT)) { 
       playRepeat(); 
      } else if (action.equals(playeractivity.BROADCAST_SEEKBAR)) { 
       updateSeekPos(intent); 
      } 
     } 

    }; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 


     b = intent.getExtras(); 
     index = b.getInt("position"); 


     MultilistArray = intent.getStringArrayListExtra("multilist"); 

     getMusic(); 
     playSong(index); 

     showNotification(); 
     setupHandler(); 
     return START_STICKY; 
    } 

    @Override 
    public void onCreate() { 

     seekIntent = new Intent(BROADCAST_ACTION); 

     mediaPlayer = new MediaPlayer(); 

     mediaPlayer.setOnSeekCompleteListener(this); 
     mediaPlayer.setOnCompletionListener(this); 
     mediaPlayer.setOnPreparedListener(this); 
     mediaPlayer.setOnErrorListener(this); 
     mediaPlayer.setOnSeekCompleteListener(this); 
     mediaPlayer.setOnInfoListener(this); 
     mediaPlayer.setOnBufferingUpdateListener(this); 


     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(BROADCAST_PLAYBACK_STOP); 
     intentFilter.addAction(BROADCAST_PLAYBACK_PAUSE); 
     intentFilter.addAction(BROADCAST_PLAYBACK_NEXT); 
     intentFilter.addAction(BROADCAST_PLAYBACK_PREVIOUS); 
     intentFilter.addAction(BROADCAST_PLAYBACK_SHUFFLE); 
     intentFilter.addAction(BROADCAST_PLAYBACK_REPEAT); 
     intentFilter.addAction(playeractivity.BROADCAST_SEEKBAR); 

     // LocalBroadcastManager.getInstance(this). 

     registerReceiver(broadcastReceiver, intentFilter); 
    } 

    public void getMusic() { 
     // TODO Auto-generated method stub 

     for (Iterator iterator = MultilistArray.iterator(); iterator.hasNext();) { 
      x = (String) iterator.next(); 
      // do some stuff 

     } 

     uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     String projection[] = { android.provider.MediaStore.Audio.Media.DATA, 
       android.provider.MediaStore.Audio.Media.TITLE, 
       android.provider.MediaStore.Audio.Media.ARTIST, 
       android.provider.MediaStore.Audio.Media.ALBUM, 
       android.provider.MediaStore.Audio.Media.COMPOSER, 
       android.provider.MediaStore.Audio.Media.DURATION, 
       MediaStore.Audio.Media._ID, 
       // android.provider.MediaStore.Audio.Albums.ALBUM_ART, 
       android.provider.MediaStore.Audio.Media.ALBUM_ID }; 

     String selection1 = MediaStore.Audio.Media._ID + " IN("; 
     // String[] selectionArgs = "{"; 
     for (int i = 0; i < MultilistArray.size(); i++) { 
      selection1 += "?, "; 

     } 


     selection1 = selection1.substring(0, selection1.length() - 2) + ")"; 

     String[] selectionArgs = new String[MultilistArray.size()]; 
     selectionArgs = MultilistArray.toArray(selectionArgs); 



     cursor = this.getContentResolver().query(uri, projection, selection1, 
       selectionArgs, null); 
     songs = new ArrayList<String>(); 

     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) { 
      songs.add(cursor.getString(2)); 
      cursor.moveToNext(); 
     } 

    } 

    public void playSong(int index2) { 
     // public void playSong() { 

     if (b.getInt("position") != 0) { 
      cursor.moveToPosition(0); 
     } 
     else{ 
     cursor.moveToPosition(index); 
     } 
     int song_id = cursor 
       .getColumnIndex(android.provider.MediaStore.Audio.Media.DATA); 

     String song_name = cursor.getString(cursor 
       .getColumnIndex(android.provider.MediaStore.Audio.Media.DATA)); 

     song_aLBUM = cursor 
       .getColumnIndex(android.provider.MediaStore.Audio.Media.ALBUM); 
     String song_album_name = cursor.getString(song_aLBUM); 


     SongDetailsId(); 
     try { 
      mediaPlayer.reset(); 
      mediaPlayer.setDataSource(song_name); 

      mediaPlayer.prepare(); 
      // sb.setMax(mediaplayer.getDuration()); 
      mediaPlayer.start(); 

      // int totalDuration = mediaplayer.getDuration(); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     // stopSelf(); 
     if (isRepeat) { 
      // repeat is on play same song again 
      playSong(index); 
     } else if (isShuffle) { 
      // shuffle is on - play a random song 
      Random rand = new Random(); 
      index = rand.nextInt((songs.size() - 1) - 0 + 1) + 0; 
      playSong(index); 
     } else { 
      // no repeat or shuffle ON - play next song 
      if (index < (songs.size() - 1)) { 
       playSong(index + 1); 
       index = index + 1; 
      } else { 
       // play first song 
       playSong(0); 
       index = 0; 
      } 
     } 
    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 
     Log.d("Service", "MediaPlayer prepared. Music will play now."); 
     mediaPlayer.start(); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    private PendingIntent makePendingIntent(String broadcast) { 
     Intent intent = new Intent(broadcast); 
     return PendingIntent 
       .getBroadcast(getApplicationContext(), 0, intent, 0); 
    } 

    private void showNotification() { 
     // Create notification 
     Builder notificationBuilder = (Builder) new NotificationCompat.Builder(
       this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(this.url) 
       // audio url will show in notification 
       .setContentIntent(
         PendingIntent.getActivity(getApplicationContext(), 0, 
           new Intent(getApplicationContext(), 
             player6.class), 0)) 
       .addAction(R.drawable.ic_action_play, "Stop", 
         makePendingIntent(BROADCAST_PLAYBACK_STOP)) 
       .addAction(R.drawable.ic_action_pause, "Pause", 
         makePendingIntent(BROADCAST_PLAYBACK_PAUSE)) 
       .addAction(R.drawable.img_btn_forward, "next", 
         makePendingIntent(BROADCAST_PLAYBACK_NEXT)); 

     // Show notification 
     startForeground(NOTIFICATION_ID, notificationBuilder.build()); 
    } 

    private void playnext() { 
     // TODO Auto-generated method stub 
     if (isShuffle) { 
      // shuffle is on - play a random song 
      Random rand = new Random(); 
      index = rand.nextInt((songs.size() - 1) - 0 + 1) + 0; 
      playSong(index); 
     } else { 
      if (index < (songs.size() - 1)) { 
       index += 1; 
       // sb.setMax(mediaplayer.getDuration()); 
       playSong(index); 
      } else { 
       index = 0; 
       playSong(index); 
      } 
     } 
    } 

    private void playprevious() { 
     // TODO Auto-generated method stub 
     if (isShuffle) { 
      // shuffle is on - play a random song 
      Random rand = new Random(); 
      index = rand.nextInt((songs.size() - 1) - 0 + 1) + 0; 
      playSong(index); 
     } else { 
      if (index > 0) { 
       index -= 1; 

       playSong(index); 
      } else { 
       index = songs.size() - 1; 
       playSong(index); 
      } 
     } 

    } 

    private void playShuffle() { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "playShuffle", Toast.LENGTH_SHORT).show(); 
     if (isShuffle) { 
      isShuffle = false; 

      playeractivity.shuffle.setText("Shuffle is OFF"); 
     } else { 
      // make repeat to true 
      isShuffle = true; 

      // make shuffle to false 
      isRepeat = false; 
      playeractivity.shuffle.setText("Shuffle is ON"); 
      playeractivity.repeat.setText("Repeat is OFF"); 

     } 

    } 

    private void playRepeat() { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "btrepeat", Toast.LENGTH_SHORT).show(); 
     if (isRepeat) { 
      isRepeat = false; 

      playeractivity.repeat.setText("Repeat is OFF"); 
     } else { 
      // make repeat to true 
      isRepeat = true; 

      isShuffle = false; 
      playeractivity.repeat.setText("Repeat is ON"); 
      playeractivity.shuffle.setText("Shuffle is OFF"); 
      // btnShuffle.setImageResource(R.drawable.btn_shuffle); 
     } 
    } 

    @Override 
    public void onBufferingUpdate(MediaPlayer mp, int percent) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onInfo(MediaPlayer mp, int what, int extra) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onSeekComplete(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     if (!mediaPlayer.isPlaying()) { 
      playSong(index); 
     } 

    } 

    @Override 
    public boolean onError(MediaPlayer mp, int what, int extra) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    private void setupHandler() { 
     handler.removeCallbacks(sendUpdatesToUI); 
     handler.postDelayed(sendUpdatesToUI, 500); 
    } 

    private Runnable sendUpdatesToUI = new Runnable() { 
     @Override 
     public void run() { 

      LogMediaPosition(); 

      handler.postDelayed(this, 500); 
     } 
    }; 

    private void LogMediaPosition() { 
     // TODO Auto-generated method stub 
     if (mediaPlayer.isPlaying()) { 
      mediaPosition = mediaPlayer.getCurrentPosition(); 

      mediaMax = mediaPlayer.getDuration(); 

      seekIntent.putExtra("counter", String.valueOf(mediaPosition)); 

      seekIntent.putExtra("mediamax", String.valueOf(mediaMax)); 

      seekIntent.putExtra("song_ended", String.valueOf(songEnded)); 
      sendBroadcast(seekIntent); 


     } 
    } 

    public void updateSeekPos(Intent intent) { 
     int seekPos = intent.getIntExtra("seekpos", 0); 
     if (mediaPlayer.isPlaying()) { 
      handler.removeCallbacks(sendUpdatesToUI); 
      // Toast.makeText(this, "positon" + seekPos, 
      // Toast.LENGTH_SHORT).show(); 
      mediaPlayer.seekTo(seekPos); 
      setupHandler(); 

     } 

    } 

    @Override 
    public void onDestroy() // called when the service is stopped 
    { 
     mediaPlayer.stop(); 
     stopForeground(true); 
     handler.removeCallbacks(sendUpdatesToUI); 
     unregisterReceiver(broadcastReceiver); 
     super.onDestroy(); 
    } 

    public void SongDetailsId() { 
     Intent intent = new Intent(playeractivity.SONG_DETAILS); 
     intent.putExtra("value", index); 
     sendBroadcast(intent); 
    } 
} 

我获得以下错误日志猫

10-16 10:07:02.742: E/dalvikvm(1134): Could not find class 'android.support.v7.app.NotificationCompat$Builder', referenced from method com.example.multiplayer.player6.showNotification

这些都是我进口

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Random; 

import android.app.PendingIntent; 
import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.database.Cursor; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnBufferingUpdateListener; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.media.MediaPlayer.OnErrorListener; 
import android.media.MediaPlayer.OnInfoListener; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.media.MediaPlayer.OnSeekCompleteListener; 
import android.media.session.MediaController; 
import android.media.session.MediaSession; 
import android.media.session.MediaSessionManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.IBinder; 
import android.provider.MediaStore; 

import android.support.v7.app.NotificationCompat; 
import android.support.v7.app.NotificationCompat.Builder; 

import android.util.Log; 
import android.widget.Button; 
import android.widget.Toast; 

现在我知道,如果我会用import android.support.v4.app.NotificationCompat;它woiuld解决我目前的问题,但我需要使用import android.support.v7.app.NotificationCompat对我今后的工作。发生

的问题

private void showNotification() { 
     // Create notification 
     Builder notificationBuilder = (Builder) new NotificationCompat.Builder(
       this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(this.url) 
       // audio url will show in notification 
       .setContentIntent(
         PendingIntent.getActivity(getApplicationContext(), 0, 
           new Intent(getApplicationContext(), 
             player6.class), 0)) 
       .addAction(R.drawable.ic_action_play, "Stop", 
         makePendingIntent(BROADCAST_PLAYBACK_STOP)) 
       .addAction(R.drawable.ic_action_pause, "Pause", 
         makePendingIntent(BROADCAST_PLAYBACK_PAUSE)) 
       .addAction(R.drawable.img_btn_forward, "next", 
         makePendingIntent(BROADCAST_PLAYBACK_NEXT)); 

     // Show notification 
     startForeground(NOTIFICATION_ID, notificationBuilder.build()); 
    } 

我已经尝试了很多事情,包括使用android.support.v4.app.NotificationCompat.Builder notificationBuilder =

,并尝试添加投(BULIDER),但每次我会得到同样的错误。

如何使用android.support.v7.app.NotificationCompatBuilder

+0

您应该为此添加最新的支持库。 –

+0

[http://stackoverflow.com/questions/26453419/notificationcompat-setstyle-cant-get-notification-mediastyle](http://stackoverflow.com/questions/26453419/notificationcompat-setstyle-cant-get-notification-mediastyle ) –

+0

'android.support.v7.app.NotificationCompat'被导入到我的项目中我还在继续得到错误对于升级我的项目我已经回答了这个问题http://stackoverflow.com/a/19114537/3126760。我试图添加存在于D:\ android \ android_sdk_details \ extras \ android \ support \ v7 \ appcompat \ libs'文件夹中的'android -support-v4.jar'和'android-support-v7-appcompat.jar'但错误仍然存​​在。 – 1234567

回答

0

万物看起来好了,给它一个尝试

  • 进口android.support.v7.app.NotificationCompat;
  • 你不需要NotificationBuilder使用
Notification notificationBuilder = new NotificationCompat.Builder(
       this) 
       .setSmallIcon(R.drawable.music) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(this.url) 
       // audio url will show in notification 
       .setContentIntent(
         PendingIntent.getActivity(getApplicationContext(), 0, 
           new Intent(getApplicationContext(), 
             player6.class), 0)) 
       .addAction(R.drawable.ic_stat_pause_100, "Stop", 
         makePendingIntent(BROADCAST_PLAYBACK_STOP)) 
       .addAction(R.drawable.ic_stat_pause_100, "Pause", 
         makePendingIntent(BROADCAST_PLAYBACK_PAUSE)) 
       .addAction(R.drawable.ic_stat_circled_right_2_100, "next", 
         makePendingIntent(BROADCAST_PLAYBACK_NEXT)).build(); 

     // Show notification 
     startForeground(NOTIFICATION_ID, notificationBuilder); 
6

帮我

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 
notificationBuilder.setSmallIcon(R.drawable.ic_stat_ic_notification); 

等。不知道为什么这必须如此格式化,但它适用于我。

相关问题