2010-11-01 18 views
13

मैं अपनी गतिविधि को पंजीकृत करने की कोशिश कर रहा हूं ताकि इसका उपयोग गतिविधि चयनकर्ता/पिकर द्वारा किया जा सके ताकि उपयोगकर्ता को यह चुनने की अनुमति मिल सके कि वह मेरे आवेदन/गतिविधि को चुनने के लिए क्या कर रहा है या नहीं।एंड्रॉइड - इरादा फ़िल्टर?

मैं उपयोगकर्ता को अपना आवेदन चुनने में सक्षम होना चाहता हूं जब वे एक एसएमएस संदेश भेजना चाहते हैं और जब वे आउटगोइंग कॉल करना चाहते हैं, तो इसे प्राप्त करने का प्रयास करने के लिए मैंने कोड के निम्नलिखित टुकड़े जोड़े मेरी प्रकट में मेरे गतिविधि टैग के भीतर:

<intent-filter> 
<action android:name="android.intent.action.SENDTO" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<data android:mimeType="text/plain" /> 
</intent-filter> 

<intent-filter> 
<action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

हालांकि गतिविधि चयनकर्ता प्रकट होता है कभी नहीं और मूल एप्लिकेशन को उपयोगकर्ता के लिए एक विकल्प प्रदान किए बिना किया जाता है। क्या कोई देख सकता है कि मैं कहां गलत हो रहा हूं?

संपादित करें:

मैं पता लगा है मैं एसएमएस संदेश के लिए

<data android:scheme="sms" /> 
<data android:scheme="smsto" /> 

जोड़ने की जरूरत है, लेकिन मैं आउटगोइंग कॉल के लिए क्या प्रयोग करते हैं?

संपादित करें 2:

मैं आउटगोइंग कॉल के लिए निम्नलिखित की कोशिश की है:

<intent-filter> 
<action android:name="android.intent.action.VIEW" /> 
<action android:name="android.intent.action.DIAL" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<category android:name="android.intent.category.BROWSABLE" /> 
<data android:scheme="tel" /> 
</intent-filter> 

लेकिन फिर कोई भाग्य के साथ, इस पर 1.6 से अवरुद्ध कर दिया गया?

संपादित करें 3:

यह जब मैं पाठ मोबाइल पर क्लिक करें तो:

alt text

तो मैं एक ही बात है जब मैं कॉल मोबाइल

उत्तर

9

मुझे लगता है कि आप

<intent-filter > 
    <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="tel" /> 
</intent-filter> 

एंड्रॉयड 2 पर परीक्षण किया गया मदद करनी चाहिए।1

+1

क्या किसी ने देखा है कि यह एचटीसी फोन पर काम नहीं करता है? मैंने अपनी गतिविधि में वही इरादा-फ़िल्टर जोड़ा है, और यह कुछ फोन पर काम करता है, लेकिन एचटीसी इनक्रेडिबल पर मेरी गतिविधि को इरादे को पूरा करने के लिए कभी भी पसंद नहीं किया जाता है। –

3

इसका कारण यह है है क्लिक करें गतिविधियां और सेवाएं स्वयं के इरादे से बाहर नहीं ले सकती हैं। आपको BroadcastReceiver का उपयोग करने की आवश्यकता है। इसे लागू करने के लिए, निम्न करें:

इसलिए की तरह Android के BroadcastReceiver वर्ग बढ़ाएँ:

<receiver android:name="MyReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     // more intents you want to catch here 
    </intent-filter> 
</receiver> 

केवल उद्देश्यों में घोषणा की:

public class MyReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
     Context context = getApplicationContext(); 
    Intent sendIntent = new Intent(); 
    if (intent.getAction().equals(Intent.NEW_OUTGOING_CALL)) { 
    sendIntent.setClass(context, MyActivity.class); 
    context.startActivity(sendIntent); 
    } 
     else if (intent.getAction().equals(Intent.SOME_OTHER_INTENT) { 
      sendIntent.setClass(context, MyService.class); 
    context.startService(sendIntent); 
     } 
     // More else ifs for more intents you want to catch. 
} 

} 

तो फिर तुम इस तरह अपने मेनिफ़ेस्ट में रिसीवर की घोषणा करने की जरूरत है मैनिफेस्ट आपके रिसीवर द्वारा पकड़ा जाएगा, इसलिए यदि आप सिस्टम या अन्य प्रोग्राम्स द्वारा फेंकने वाले कई इरादों को पकड़ना चाहते हैं और जब उनके इरादे पकड़े जाते हैं तो वही काम करना चाहते हैं, तो यहां उन इरादों को मैनिफेस्ट में निर्दिष्ट करें और if/अन्य ब्लॉक ऑनसेसिव विधि में।

+1

मुझे लगता है कि मुझे प्राप्त करने के लिए मैं क्या चाहते हैं, मैं भेज के लिए रजिस्टर और सिस्टम से भेजे गए उद्देश्यों को डायल करना चाहते हैं के लिए सही तरीका है न , मेरे पास उपरोक्त के रूप में काम करने वाला SEND है जब मैं टेक्स्ट भेजने पर क्लिक करता हूं, "पूर्ण कार्रवाई का उपयोग करें" संवाद प्रकट होता है जो वास्तव में मैं चाहता हूं, मुझे कॉल संपर्क पर क्लिक करने के लिए बस ऐसा करने में सक्षम होना चाहिए। –

+2

आह तो शायद आपको कुछ अनुमतियां निर्दिष्ट करने की आवश्यकता है जिसके लिए आप चाहते हैं कि आपके प्रोग्राम को उपयोग करने की अनुमति दी जाए। Http://developer.android.com/reference/android/Manifest.permission.html पर देखें। मेरा मानना ​​है कि आपको CALL_PHONE अनुमति का उपयोग करने की आवश्यकता है। – AndrewKS

+0

हाँ, मेरे पास यह भी है - <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.CALL_PHONE" /> समझ में नहीं आ रहा है कि यह बिल्कुल क्यों काम नहीं कर रहा है। –

1

आपको इरादे फ़िल्टर को प्राथमिकता जोड़ने की आवश्यकता है ताकि एंड्रॉइड इसे ध्यान में रखे। उदाहरण के लिए:

<activity android:name="YourActivity"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 
2

यह मेरे लिए काम किया

<activity 
     android:label="@string/app_name" 
     android:name=".TestIntentActivity" >    
     <intent-filter> 
     <action android:name="android.intent.action.CALL" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
     <data android:scheme="tel" /> 
     </intent-filter> 
    </activity> 
संबंधित मुद्दे