2015-09-28 84 views
3

爲什麼不能在android 6棉花糖Api 23上工作?它不會拋出異常,但callStateListener中的代碼不起作用。爲什麼不能在android 6棉花糖Api 23上工作?

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
PhoneStateListener callStateListener = new PhoneStateListener() { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     //if(logAtive) Log.i(LOG_TAG,incomingNumber + " " + state); 
     if(state==TelephonyManager.CALL_STATE_RINGING){ 
      Toast.makeText(getApplicationContext(),"Hey, receive your call. Phone is ringing.", 
        Toast.LENGTH_LONG).show(); 
     } 
     if(state==TelephonyManager.CALL_STATE_OFFHOOK){ 
      Toast.makeText(getApplicationContext(),"You are in a call. ", 
        Toast.LENGTH_LONG).show(); 
     } 
     if(state==TelephonyManager.CALL_STATE_IDLE){ 
      Toast.makeText(getApplicationContext(),"You are in idle state… ", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
}; 

telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

權限:

<uses-feature android:name="android.hardware.telephony" android:required="true" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" /> 

它完美地在Android中5.1.1但不是在6(API等級23)

+3

也許是因爲新的權限模式 –

+1

該代碼不會執行任何操作。你創建一個'PhoneStateListener',然後不做任何事情。 – CommonsWare

+0

Android不具備android.permission.PROCESS_INCOMING_CALLS權限現在,它使用的是較早出現,檢查權限 – AshuKingSharma

回答

0

請發表您的AndroidManifest,以及check the following documeetation:

請注意,訪問某些電話信息是受權限保護的。您的應用程序不會接收受保護信息的更新,除非它的清單文件中聲明瞭相應的權限。在適用權限的地方,它們會在相應的LISTEN_標誌中標出。

(Source:)來電電話號碼。如果應用程序沒有READ_PHONE_STATE權限,則會將空字符串作爲參數傳遞。

3

您可能沒有任何權限訪問TelephonyManager(例如READ_PHONE_STATE)。

按照documentation,當你沒有要求或者沒有被授予權限,但仍試圖訪問它,結果將是空的,而不是例外像過去:

如果用戶關閉舊版應用的權限,則系統將以靜默方式禁用相應的功能。當應用程序嘗試執行需要該權限的操作時,該操作不一定會導致異常。相反,它可能會返回一個空的數據集,發出錯誤信號或者出現意外的行爲。例如,如果您未經許可查詢日曆,則該方法將返回一個空數據集。

你要問用戶授予相應的權限,以及處理情況下,當用戶已經拒絕或已撤銷的許可等有一個如何使用這種here的詳細描述。

5

我剛纔碰到了這個,想通了。這是因爲你的目標是Android SDK 23.如果你更改你的清單文件到目標API 22,那麼它即使在Marshmallow設備上安裝並運行時也會開始工作。

如果您仍然想要定位API 23,那麼您必須先使用新的運行時權限API來請求權限使用,否則將被拒絕。

https://developer.android.com/training/permissions/requesting.html

+0

我們需要改變目標API中的build.gradle(模塊:應用程序)文件還?請讓我知道我太面對同樣的問題。 – srinivas

+0

最佳答覆,謝謝 – tamtoum1987

1

我所觀察到的非常相同的行爲。我們的應用程序在棒棒糖上運行得非常好,而不是在棉花糖上。它與權限無關。實際上,我寫的測試應用程序,我剛剛進入設置,並提前給予權限。我們的應用中存在的問題是電話號碼本身,它來自外部來源。如果Android認爲它是無效的,你將不會得到叫做棉花糖的onCallStateChanged。只需使用虛假號碼1234567890,,2#(「無效」)與1234567890(「有效」)來驗證它。我不知道如何「修復」數字,作爲擴展數字的一部分。
編輯:bug report I've opened at 16 Dec. 15

相關問題