2011-03-30 11 views
8

क्या फ़ोनस्टेटइन्टेंट रिसीवर या फोनस्टेट लिस्टनर का उपयोग किए बिना ओएस के प्रसारण को सुनने के लिए ब्रॉडकास्ट रिसीवर को विस्तारित करके आने वाली कॉल सुनने का कोई तरीका है। कृपया मुझे बताएं कि मैनिफेस्ट में कार्रवाई और अनुमतियां क्या होंगी।फोनस्टेटइन्टेंट रिसीवर या फोनस्टेट लिस्टर के बिना ब्रॉडकास्ट रिसीवर के माध्यम से आने वाली कॉल सुनें

मैं इस प्रकार के साथ की कोशिश की है, लेकिन यह आने वाली कॉल के लिए काम नहीं है, लेकिन बाहर जाने वाले

एप्लिकेशन का केवल एक जावा फाइल इस प्रकार है (एप्लिकेशन केवल एक जावा फाइल और एक मैनिफ़ेस्ट फ़ाइल के लिए काम)

package com.crsardar.media.audio; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class IncommingCallReceiverCRS extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.e("Chitta : ", "Its working");   
    } 
} 

प्रकट

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.crsardar.media.audio" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

    <receiver android:name="IncommingCallReceiverCRS" android:enabled="true"> 
     <intent-filter> 
      <!--action android:name="android.intent.action.NEW_OUTGOING_CALL"/--> 
      <action android:name="android.intent.action.ANSWER" > 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

    </application> 

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.RECORD_AUDIO"/> 
</manifest> 

उत्तर

8

कार्रवाई आप अपने मेनिफ़ेस्ट में परिभाषित किया है सही नहीं है। यह एक एक्शन इरादा है जिसका उपयोग कॉल का जवाब देने और आने वाली कॉलों की निगरानी करने के लिए नहीं किया जा सकता है।

आप दो प्रसारण रिसीवर का उपयोग कर सकते हैं जो ACTION_PHONE_STATE_CHANGED और NEW_OUTGOING_CALL प्रसारण उद्देश्यों को सुनते हैं।

ACTION_PHONE_STATE_CHANGED प्राप्त होगा जब कोई नया इनकमिंग कॉल, कॉल उत्तर या हैंगअप (इस इरादे से प्राप्त एक्स्ट्रा के लिए प्रलेखन देखें)।

आपके डिवाइस पर एक नया आउटगोइंग कॉल होने पर NEW_OUTGOING_CALL प्राप्त होगा।

अनुमतियों के लिए के रूप में, मुझे लगता है कि आप अपने मेनिफ़ेस्ट में अधिकार के बारे में समझ में आ गया

0

यहाँ एंड्रॉयड इकाई परीक्षण के लिए मेरे डेमो है (मैं RECORD_AUDIO अनुमति अपने आवेदन में कुछ और के लिए प्रयोग किया जाता है मान लेते हैं)। आप इसका उल्लेख कर सकते हैं।

public interface ICallVerify { 
    void onOutgoing(Context context, Intent intent); 
    void onCallStateChange(Context context, Intent intent); 
} 

protected void setUpCallVerify(final ICallVerify callVerify) { //listen ingoing and outgoing 
    final CountDownLatch latch = new CountDownLatch(1); 
    BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { //state change 
       Log.i(TAG, "outgoing call..."); 
       callVerify.onOutgoing(context, intent); 
      } else if (intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)){ // state changed 
       String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
       if (state.equals("RINGING")) { 
        state += " number:" + intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
       } 
       Log.i(TAG, "call state changed.... " + state); 
       callVerify.onCallStateChange(context, intent); 
      } 
     } 
    }; 

    IntentFilter filter = new IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED); 
    filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL); 
    ContextUtils.getTargetContext().registerReceiver(receiver, filter); 

    try { 
     latch.await(5, TimeUnit.MINUTES); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

न अनुमतियाँ

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission> 
जोड़ना भूल