Could not find class 'android.support.v7.app.NotificationCompat$Builder', after upgrading the project from v4
I am trying to use notification for managing my mediaplyaer controls.
I require to use android.support.v7.app.NotificationCompat
for my project for further work on lock screen controls as per this question.
https://stackoverflow.com/a/31013955/3126760
I have updated my support library to 23.0.1
When i try to build the following code
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);
}
}
i get following error in the log cat
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
these are my imports
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;
now I Know if I would use import android.support.v4.app.NotificationCompat;
it woiuld solve my current problem , but I need to use import android.support.v7.app.NotificationCompat
for my future work.
the problem occurs in
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());
}
I have tried many things including using android.support.v4.app.NotificationCompat.Builder notificationBuilder =
and also trying to add cast (BULIDER) but each time I would get same error.
How Can i use android.support.v7.app.NotificationCompat
with Builder
This helped me
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
notificationBuilder.setSmallIcon(R.drawable.ic_stat_ic_notification);
and so on. Don’t know why this have to be so formatted but it works for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With