एंड्रॉइड में इरादे का उपयोग करके फोन कॉल कैसे करें?


329

मैं एंड्रॉइड में कॉल करने के लिए निम्न कोड का उपयोग कर रहा हूं लेकिन यह मुझे सुरक्षा अपवाद दे रहा है कृपया मदद करें।

 posted_by = "111-333-222-4";

 String uri = "tel:" + posted_by.trim() ;
 Intent intent = new Intent(Intent.ACTION_CALL);
 intent.setData(Uri.parse(uri));
 startActivity(intent);

अनुमतियाँ

 <uses-permission android:name="android.permission.CALL_PHONE" />

अपवाद

11-25 14:47:01.661: ERROR/AndroidRuntime(302): Uncaught handler: thread main exiting due to uncaught exception
11-25 14:47:01.681: ERROR/AndroidRuntime(302): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:111-333-222-4 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{43d32508 302:com.Finditnear/10026} (pid=302, uid=10026) requires android.permission.CALL_PHONE
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.os.Parcel.readException(Parcel.java:1218)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.os.Parcel.readException(Parcel.java:1206)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1214)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Activity.startActivityForResult(Activity.java:2749)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Activity.startActivity(Activity.java:2855)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at com.Finditnear.PostDetail$2$1$1$1.onClick(PostDetail.java:604)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.ListView.performItemClick(ListView.java:3285)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)

जवाबों:


383

आप उपयोग कर सकते हैं Intent.ACTION_DIALके बजाय Intent.ACTION_CALL। यह पहले से दर्ज किए गए नंबर के साथ डायलर दिखाता है, लेकिन उपयोगकर्ता को यह तय करने की अनुमति देता है कि वास्तव में कॉल करना है या नहीं। अनुमति की ACTION_DIALआवश्यकता नहीं है CALL_PHONE


ACTION_DIAL को अनुमति की आवश्यकता नहीं है, यह ACTION_CALL इरादे के साथ तुलना में एक महत्वपूर्ण अंतर है :)
अधिकतम

237

यह डेमो आपके लिए मददगार होगा ...

कॉल बटन पर क्लिक करें:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number"));
startActivity(intent);

मेनिफेस्ट में अनुमति:

 <uses-permission android:name="android.permission.CALL_PHONE" />

1
"टेल:" के लिए +1। मुझे इसके बजाय फोन आया था और कोई इरादा अपवाद नहीं मिला। टीएनएक्स
टीना

यह केवल मेरे नेक्सस 4 में काम नहीं करता है। यह डायलर को फोन नंबर दिखाते हुए खोलता है लेकिन उपयोगकर्ता के संपर्क के बिना कॉल शुरू नहीं करता है। कोई आत्महत्या?
मैथ्यूजार्डीबीबी 14

5
प्रश्न और इस उत्तर में कोड के बीच क्या अंतर है? यह समस्या का समाधान कैसे करता है?
गवरील

यह मेरे लिए स्काइप खोलता है।
आरजेबी

कृपया काल फोन रन समय अनुमति भी जोड़ें
रघु कृष्णन R

180

अधिक सुंदर विकल्प:

String phone = "+34666777888";
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null));
startActivity(intent);

5
यह पिछले उत्तर की तरह मैनिफेस्ट में कुछ भी जोड़ने के बिना काम करता है
Pavlos

4
कोई रनटाइम अनुमतियों की आवश्यकता नहीं है। +1
कीक

82

अपने इरादे में कार्रवाई ACTION_DIAL का उपयोग करें, इस तरह आपको किसी अनुमति की आवश्यकता नहीं होगी। जिस कारण से आपको ACTION_CALL के साथ अनुमति की आवश्यकता है, उपयोगकर्ता से किसी भी कार्रवाई के बिना फोन कॉल करना है।

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0987654321"));
startActivity(intent);

2
यह उस स्थिति में बेहतर है जहाँ आपको अनुमति माँगने की आवश्यकता नहीं है।
zackygaurav

1
कोड की दूसरी पंक्ति में एक लापता अर्धविराम है। सही जवाब!
ahmed_khan_89

73

सब कुछ ठीक है।

मैंने मैनिफ़ेस्ट फ़ाइल में एप्लिकेशन टैग से पहले सिर्फ कॉल परमिशन टैग लगाया

और अब हर चीज ठीक काम कर रही है।


2
अनुमति के बिना लगभग उसी तरह प्राप्त करने के लिए और उपयोगकर्ता को वास्तव में कॉल न करने के लिए एक मौका के साथ नीचे मेरा जवाब देखें।
रिदिकली

3
इसके अलावा, टेलीफोनी-कम उपकरणों के बारे में जागरूक
रहें


31

महत्वपूर्ण लेख:

यदि आप उपयोग करते हैं Intent.ACTION_CALLतो आपको CALL_PHONEअनुमति देनी होगी ।

इसका ओके केवल तभी है जब आप नहीं चाहते कि आपका ऐप टैबलेट के लिए Google Play में दिखाए, जो सिम कार्ड नहीं लेता है या जीएसएम नहीं रखता है।

आपकी गतिविधि में:

            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER));
            startActivity(callIntent);

MANIFEST:

<uses-permission android:name="android.permission.CALL_PHONE" />

इसलिए यदि यह आपके ऐप के लिए महत्वपूर्ण विशेषता नहीं है, तो CALL_PHONEअनुमति जोड़ने से दूर रहने का प्रयास करें ।

अन्य समाधान:

फोन ऐप को स्क्रीन पर लिखे नंबर के साथ दिखाना है, इसलिए उपयोगकर्ता को केवल कॉल बटन पर क्लिक करना होगा:

            Intent dialIntent = new Intent(Intent.ACTION_DIAL);
            dialIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER));
            startActivity(dialIntent);

इसके लिए किसी अनुमति की आवश्यकता नहीं है।


24

बिना किसी अतिरिक्त अनुमति के बस सरल ऑनलाइनर:

private void dialContactPhone(final String phoneNumber) {
    startActivity(new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phoneNumber, null)));
}

18

इस पूर्ण कोड का उपयोग करें

          Intent callIntent = new Intent(Intent.ACTION_DIAL);
          callIntent.setData(Uri.parse("tel:"+Uri.encode(PhoneNum.trim())));
          callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          startActivity(callIntent);     

1
इस तकनीक ने मेरे लिए काम किया, हालाँकि मुझे Intent.ACTION_DIAL को Intent.Anction_CALL में बदलना पड़ा।
नईम ए। मलिक

12

अनुरोध प्रकट में अनुमति

<uses-permission android:name="android.permission.CALL_PHONE" />

कॉलिंग के लिए इस कोड का उपयोग करें

Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:99xxxxxxxx"));
try {
    startActivity(in);
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(mcontext, "Could not find an activity to place the call.", Toast.LENGTH_SHORT).show();
}

3
मुझे लगता है कि आपको अनुमति की आवश्यकता नहीं है क्योंकि आपका ऐप स्वयं कॉल नहीं कर रहा है, लेकिन इसे करने के लिए समर्पित ऐप (जिसकी अनुमति है) से पूछ रहा है।
मोस्ट्रपोट्सकी

9

AndroidManifest.xml में अनुमति

<uses-permission android:name="android.permission.CALL_PHONE" />

पूरा कोड:

private void onCallBtnClick(){
    if (Build.VERSION.SDK_INT < 23) {
        phoneCall();
    }else {

        if (ActivityCompat.checkSelfPermission(mActivity,
                Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {

            phoneCall();
        }else {
            final String[] PERMISSIONS_STORAGE = {Manifest.permission.CALL_PHONE};
            //Asking request Permissions
            ActivityCompat.requestPermissions(mActivity, PERMISSIONS_STORAGE, 9);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    boolean permissionGranted = false;
    switch(requestCode){
        case 9:
            permissionGranted = grantResults[0]== PackageManager.PERMISSION_GRANTED;
            break;
    }
    if(permissionGranted){
        phoneCall();
    }else {
        Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
    }
}

private void phoneCall(){
    if (ActivityCompat.checkSelfPermission(mActivity,
            Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:12345678900"));
        mActivity.startActivity(callIntent);
    }else{
        Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
    }
}

8

अनुमतियां:

<uses-permission android:name="android.permission.CALL_PHONE" />

आशय:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:0377778888"));
startActivity(callIntent);


5

इंटेंट्स का उपयोग करके कॉल गतिविधि करने के लिए, आपको उचित अनुमतियों का अनुरोध करना चाहिए।

उसके लिए आप AndroidManifest.xml फ़ाइल में अनुमतियों का उपयोग करते हैं।

<uses-permission android:name="android.permission.CALL_PHONE" />

फिर अपनी गतिविधि में निम्नलिखित कोड शामिल करें

if (ActivityCompat.checkSelfPermission(mActivity,
        Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    //Creating intents for making a call
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:123456789"));
    mActivity.startActivity(callIntent);

}else{
    Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
}

4

डायलर से कॉल के लिए (कोई अनुमति की आवश्यकता नहीं):

   fun callFromDailer(mContext: Context, number: String) {
        try {
            val callIntent = Intent(Intent.ACTION_DIAL)
            callIntent.data = Uri.parse("tel:$number")
            mContext.startActivity(callIntent)
        } catch (e: Exception) {
            e.printStackTrace()
            Toast.makeText(mContext, "No SIM Found", Toast.LENGTH_LONG).show()
        }
    }

एप्लिकेशन से सीधे कॉल के लिए (अनुमति की आवश्यकता):

  fun callDirect(mContext: Context, number: String) {
        try {
            val callIntent = Intent(Intent.ACTION_CALL)
            callIntent.data = Uri.parse("tel:$number")
            mContext.startActivity(callIntent)
        } catch (e: SecurityException) {
            Toast.makeText(mContext, "Need call permission", Toast.LENGTH_LONG).show()
        } catch (e: Exception) {
            e.printStackTrace()
            Toast.makeText(mContext, "No SIM Found", Toast.LENGTH_LONG).show()
        }
    }

अनुमति:

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

3

इससे बचने के लिए - कोई GUI का उपयोग अनुमतियों को दर्ज करने के लिए कर सकता है। अनुमति टैग को सम्मिलित करने के लिए ग्रहण का ध्यान रखें और अधिक बार तो सही नहीं है


2
// Java
String mobileNumber = "99XXXXXXXX";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL); // Action for what intent called for
intent.setData(Uri.parse("tel: " + mobileNumber)); // Data with intent respective action on intent
startActivity(intent);

// Kotlin
val mobileNumber = "99XXXXXXXX"
val intent = Intent()
intent.action = Intent.ACTION_DIAL // Action for what intent called for
intent.data = Uri.parse("tel: $mobileNumber") // Data with intent respective action on intent
startActivity(intent)

1

कुछ कार्यात्मकताओं के लिए Android में आपको मेनिफेस्ट फ़ाइल की अनुमति को जोड़ने की आवश्यकता है।

  1. प्रोजेक्ट्स AndroidManifest.xml पर जाएं
  2. अनुमतियाँ टैब पर क्लिक करें
  3. Add पर क्लिक करें
  4. उपयोग अनुमति का चयन करें
  5. नीचे स्नैपशॉट देखेंयहां छवि विवरण दर्ज करें

6. प्रकट फ़ाइल को सहेजें और फिर अपनी परियोजना चलाएँ। आपका प्रोजेक्ट अब उम्मीद के मुताबिक चलना चाहिए।


1
आप किस आईडीई का उपयोग कर रहे हैं?
SHA2NK


1
    final public void Call(View view){

    try {

        EditText editt=(EditText)findViewById(R.id.ed1);
        String str=editt.getText().toString();
        Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+str));
        startActivity(intent);
    }
    catch (android.content.ActivityNotFoundException e){

        Toast.makeText(getApplicationContext(),"App failed",Toast.LENGTH_LONG).show();
    }

1
 if(ContextCompat.checkSelfPermission(
        mContext,android.Manifest.permission.CALL_PHONE) != 
              PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions((Activity) mContext, new 
                  String[]{android.Manifest.permission.CALL_PHONE}, 0);
                } else {
                    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Number")));
                }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.