0

Androidのサービスから音楽ストリームを再生するので、音楽の再生が開始されると、上に通知が表示され、再生/一時停止ボタン、音楽のタイトル、および音楽カバー写真のサムネイルが表示されます。次のように、サービス コード内で通知を開始します。

int icon = R.drawable.ic_launcher;
    long when = System.currentTimeMillis();
    notification = new Notification(icon, "", when);

    mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

    notificationContentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
    notificationContentView.setImageViewResource(R.id.thumbnailNotification, R.drawable.ic_launcher);
    notificationContentView.setTextViewText(R.id.albumtitleNotification, sntSongAlbum);
    notificationContentView.setTextViewText(R.id.songnameNotification, sntSongTitle);
    notification.contentView = notificationContentView;

    Intent notificationIntent = new Intent(this, OpenSongActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.contentIntent = contentIntent;

    notification.flags |= Notification.FLAG_ONGOING_EVENT;
    notification.flags |= Notification.FLAG_NO_CLEAR;

custom_notification.xmlは次のようになります。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
    android:id="@+id/thumbnailNotification"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp" />

<TextView android:id="@+id/albumtitleNotification"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/thumbnailNotification"
    android:layout_marginRight="8dp"
    android:paddingTop="5dp"
    style="Custom Notification Title" />
<TextView android:id="@+id/songnameNotification"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/thumbnailNotification"
    android:layout_below="@id/albumtitleNotification"
    android:layout_marginRight="8dp"
    style="Custom Notification Text" />




<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_margin="8dp"
    android:id="@+id/closeButton"
    android:background="@android:drawable/presence_offline"
    android:clickable="false" />


<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/playNotification"
    android:layout_marginLeft="8dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentBottom="true"
    android:background="@android:drawable/ic_media_pause" />

これは完全に機能し、ImageViewのリソースフォルダーに含まれるic_launcherアイコンを設定しますが、私が達成したいのは、この画像をURLから画像に設定することです.ボレーライブラリを使用して画像をダウンロードして設定するので、ImageViewを以下に、 thumbnailNotification.xml 内の id=thumbnailNotification を追加します。

   <com.android.volley.toolbox.NetworkImageView
    android:id="@+id/thumbnailNotification"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    aandroid:layout_marginRight="10dp />

しかし今、サービスからこれを設定する方法は?

4

1 に答える 1

2

remoteViews でボレーを使用する方法が見つからなかったため、最終的に BitmapFactory を使用して画像を設定しました。

  public class NotificationImageAsyncTask extends AsyncTask<String, Void, Bitmap> {

    @Override protected Bitmap doInBackground(Void... params) {
        Bitmap bm = null;
        try {
            URL aURL = new URL(params[0]);
            URLConnection conn = aURL.openConnection();
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();
        } catch (IOException e) {
            Log.e(TAG, "Error getting bitmap", e);
        }
        return bm;
    }

    @Override protected void onPostExecute(Bitmap result) {

         notificationContentView.setImageViewBitmap(R.id.thumbnailNotification , result);
    }
}

...

new NotificationImageAsyncTask().execute("Image URL");
于 2015-03-19T23:25:55.840 に答える