2014-03-04 15 views
0

我的設備是帶有API 15的galaxy s2。 我的程序有min sdk api 11和target sdk api 19. 它使用通知構建器,並在模擬器中正常運行。 嘗試在設備上運行,如何使用API​​ 15在設備上調用通知Builder.build()?

03-04 09:51:47.503: E/AndroidRuntime(16416): FATAL EXCEPTION: main 
03-04 09:51:47.503: E/AndroidRuntime(16416): java.lang.NoSuchMethodError: android.app.Notification$Builder.build 
03-04 09:51:47.503: E/AndroidRuntime(16416): at com.myprogram.NotifyActivity.onReceive(NotifyActivity.java:60) 
03-04 09:51:47.503: E/AndroidRuntime(16416): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2130) 
03-04 09:51:47.503: E/AndroidRuntime(16416): at android.app.ActivityThread.access$1500(ActivityThread.java:127) 
03-04 09:51:47.503: E/AndroidRuntime(16416): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208) 
03-04 09:51:47.503: E/AndroidRuntime(16416): at android.os.Handler.dispatchMessage(Handler.java:99) 

,如果我理解正確的,Android的文檔要求爲目標最高的版本,並使用一個支持庫具有較低的API的設備。我按照指令安裝了支持庫http://developer.android.com/tools/support-library/index.html

+1

你必須針對支持庫自己在你的來源;只是將其添加到項目中是不夠的。系統不只是使用它 – Guardanis

+1

好吧,我改變了我的代碼來使用NotificationCompat.Builder,而它似乎工作。 – likejiujitsu

+0

@likejiujitsu請考慮接受答案。 –

回答

3

Builder.build()是因爲API級16

使用以下的方法來創建通知可用。

@SuppressLint("NewApi") 
@SuppressWarnings("deprecation") 
public static Notification build(final Builder builder) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
     return builder.build(); 
    } else { 
     return builder.getNotification(); 
    } 
} 

或者你可以使用

NotificationCompat.Builder

+0

試圖測試您的解決方案,我在'@SuppressLint(「NewApi」)''說明\t資源\t路徑\t位置得到一個編譯錯誤\t類型 的屬性值是未定義type' – likejiujitsu

+0

刪除註釋和它的工作註釋! – likejiujitsu

-1

java.lang.NoSuchMethodError指示android.app.Notification$Builder.build方法存在於編譯期間的類路徑中,但不是在應用程序在設備上運行期間存在。讓你在其他設備上運行你的應用程序?也許三星改變了這個類的實現。

+0

請看我對我做了什麼修復它的評論。 – likejiujitsu

相關問題