閱讀704 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android自定義通知欄的效果音

https://blog.csdn.net/rzleilei/article/details/17792437


在彈出Notification通知的時候有時候想自定義聲音,畢竟係統自帶的那一種聲音太單調了。

本想修改

Notification noti = new Notification(iconid, "通知", System.currentTimeMillis());

noti.defaults = Notification.DEFAULT_SOUND;

在noti進行修改,使其可以播放別的聲音,但是找遍了API也沒看到相應的方法。

後來索性不播放這個係統自帶的效果音了,我調用這個方法的時候播放一個 自定義的通知音就可以了。。

這就是大體的思路,方法很簡單。如下:


我的音樂文件放在了raw文件夾下:money.ogg

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.lxl.testapp;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.Notification;  
  5. import android.app.PendingIntent;  
  6. import android.content.BroadcastReceiver;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.content.IntentFilter;  
  10. import android.content.pm.PackageInfo;  
  11. import android.content.pm.PackageManager.NameNotFoundException;  
  12. import android.graphics.Color;  
  13. import android.media.Ringtone;  
  14. import android.media.RingtoneManager;  
  15. import android.net.Uri;  
  16. import android.os.Bundle;  
  17. import android.text.SpannableStringBuilder;  
  18. import android.text.Spanned;  
  19. import android.text.style.ForegroundColorSpan;  
  20. import android.util.Log;  
  21. import android.view.View;  
  22. import android.view.View.OnClickListener;  
  23. import android.widget.Button;  
  24. import android.widget.RemoteViews;  
  25.   
  26. public class MainActivity extends Activity {  
  27.       
  28.     static Context context;  
  29.     static int NOTIFICATIONS_ID=101;  
  30.       
  31.     @Override  
  32.     protected void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.           
  35.         setContentView(R.layout.button);  
  36.         this.context=this;  
  37.           
  38.           
  39.         Button b1=(Button) findViewById(R.id.button1);  
  40.         b1.setOnClickListener(new OnClickListener() {  
  41.               
  42.             @Override  
  43.             public void onClick(View v) {  
  44.                 showNotification(R.drawable.ic_launcher, MainActivity.class"積分""獎勵積分獎勵積分獎勵積分獎勵積分獎勵積分");  
  45.             }  
  46.         });  
  47.         IntentFilter filter=new IntentFilter();  
  48.         filter.addAction("TTTTT");  
  49.         this.registerReceiver(new MyReceive(), filter);  
  50.     }  
  51.       
  52.     class MyReceive extends BroadcastReceiver{  
  53.   
  54.         @Override  
  55.         public void onReceive(Context context, Intent i) {  
  56.             String package1 = i.getPackage();  
  57.             System.out.println(package1);  
  58.             try {  
  59.                 PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);  
  60.                 String packageName = info.applicationInfo.packageName;  
  61.                 System.out.println(packageName);  
  62.             } catch (NameNotFoundException e) {  
  63.                 // TODO Auto-generated catch block  
  64.                 e.printStackTrace();  
  65.             }    
  66.               
  67.             Log.e("TEST", context.toString());  
  68.               
  69.               
  70.         }  
  71.           
  72.     }  
  73.       
  74.     public void showNotification(int iconid,Class c,String title,String content){  
  75.          //建立一個通知實例,第一個參數是圖片,第二個標題欄上顯示的文字,第三個是時間   
  76.        Notification noti = new Notification(iconid, "通知", System.currentTimeMillis());  
  77.        //設置跳轉的activity,暫時不需要activity的跳轉  
  78.        Intent intent=new Intent();  
  79.        //當單擊下拉下來的標題內容時候做什麼,這裏是跳轉到主界麵。這裏和下麵是一起的。   
  80.        PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);  
  81.        //設置樣式,默認為聲音  
  82. //       noti.defaults = Notification.DEFAULT_SOUND;  
  83.        //修改提示聲音  
  84.        noti.contentView=getRemoteViews("0.15","2.20");  
  85.        noti.contentIntent=contentIntent;  
  86. //       Title 是拉下來的標題,Content也是下拉後的內容顯示   
  87. //       noti.setLatestEventInfo(context, title, content, contentIntent);  
  88.        //顯示這個通知   
  89.        PhoneManager.getNotificationManager(context).notify(NOTIFICATIONS_ID++, noti);  
  90.        playSound();  
  91.     }  
  92.     //播放自定義的聲音  
  93.     public void playSound() {  
  94.         String uri = "android.resource://" + context.getPackageName() + "/"+R.raw.money;  
  95.         Uri no=Uri.parse(uri);  
  96.           
  97.         Ringtone r = RingtoneManager.getRingtone(getApplicationContext(),  
  98.                 no);  
  99.         r.play();  
  100.     }  
  101.       
  102.     public static RemoteViews getRemoteViews(String reward,String total){  
  103.         RemoteViews contentView = new RemoteViews("com.lxl.testapp",R.layout.noti);  
  104.         contentView.setImageViewResource(R.id.image,R.drawable.money);  
  105.         String text1="恭喜!您獲得獎勵";  
  106.         String text2="元";  
  107.         String str=text1+reward+text2;  
  108.           
  109.         SpannableStringBuilder style = new SpannableStringBuilder(str);  
  110.         style.setSpan(new ForegroundColorSpan(Color.parseColor("#ff4e00")), text1.length(),  
  111.                 text1.length()+reward.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  112.         contentView.setTextViewText(R.id.title, style);  
  113.         contentView.setTextViewText(R.id.text,"今日累積獲得"+total+"元。");  
  114.         return contentView;  
  115.     }  
  116. }  

最後更新:2017-04-03 12:54:03

  上一篇:go 【菜鳥翻譯】運行你的App (三)
  下一篇:go JRainbow二次開發手冊