2011-03-08 11 views
20

मैं एक नंबर एक पाठ बॉक्स में दिए गए कॉल करना चाहते हैं, लेकिन मैं त्रुटि हो रही है:Android एप्लिकेशन कॉल करने के लिए बटन पर एक संख्या पर क्लिक करें

The application 'xyz'(process com.android) has stopped unexpectedly

निम्नलिखित मेरी कोड है। यह गलत कहां जा रहा है?

EditText txtPhn; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button callButton = (Button)findViewById(R.id.btnCall); 
    txtPhn = (EditText)findViewById(R.id.txtPhnNumber); 
    callButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      try { 
        Intent callIntent = new Intent(Intent.ACTION_CALL); 
        callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString())); 
        startActivity(callIntent); 
       } catch (ActivityNotFoundException activityException) { 
        Log.e("Calling a Phone Number", "Call failed", activityException); 
       } 
     } 
    }); 
} 

संपादित LogCat

03-09 11:23:25.874: ERROR/AndroidRuntime(370): FATAL EXCEPTION: main 
03-09 11:23:25.874: ERROR/AndroidRuntime(370): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{40738d70 370:org.krish.android/10034} (pid=370, uid=10034) requires android.permission.CALL_PHONE 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.os.Parcel.readException(Parcel.java:1322) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.os.Parcel.readException(Parcel.java:1276) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.app.Activity.startActivityForResult(Activity.java:2827) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.app.Activity.startActivity(Activity.java:2933) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at org.krish.android.caller$1.onClick(caller.java:29) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.view.View.performClick(View.java:2485) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.view.View$PerformClick.run(View.java:9080) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.os.Handler.handleCallback(Handler.java:587) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.os.Looper.loop(Looper.java:123) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-09 11:23:25.874: ERROR/AndroidRuntime(370):  at dalvik.system.NativeStart.main(Native Method)`enter code here` 
+0

क्या आपने <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.CALL_PHONE" /> प्रकट फ़ाइल में अनुमति घोषित की है? –

+0

मैंने अपनी मेनिफेस्ट फ़ाइल में वह टैग जोड़ दिया है ...फिर भी वही समस्या – FosterZ

+0

जिस डिवाइस पर आप परीक्षण कर रहे हैं और आपको लॉग आउटपुट – ingsaurabh

उत्तर

18

सुनिश्चित करें कि आप AndroidManifest.xml फ़ाइल (बाहर <application ... /> टैग में सही स्तर पर है <uses-permission ... /> टैग जोड़ लिया बनाना लेकिन <manifest ... /> टैग के भीतर):

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.dbm.pkg" 
    android:versionCode="1" 
    android:versionName="1.0"> 

    <!-- NOTE! Your uses-permission must be outside the "application" tag 
       but within the "manifest" tag. --> 

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

    <application 
     android:icon="@drawable/icon" 
     android:label="@string/app_name"> 

     <!-- Insert your other stuff here --> 

    </application> 

    <uses-sdk android:minSdkVersion="9" /> 
</manifest> 
2

आप निम्नलिखित दृष्टिकोण की कोशिश करना चाहते हो सकता है:

Intent callIntent = new Intent(Intent.ACTION_CALL); 
callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString())); 
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(callIntent); 

अर्थात callIntent.setFlags(...) फ़ंक्शन कॉल जोड़ना।

0

जोड़ने का प्रयास करें ट्रिम():

callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString().trim())); 
+0

@ पीटर-काम नहीं किया .. – FosterZ

10

कॉल करने के लिए दो उद्देश्य हैं/कॉल करना प्रारंभ करें: ACTION_CALL और ACTION_DIAL।

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

तो सुनिश्चित करें कि आप अपने AndroidManifest.xml में अनुमति

uses-permission android:name="android.permission.CALL_PHONE" 

है

+0

हाँ मैंने इस अनुमति को 'उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.CALL_PHONE" पहले से जोड़ा है ... – FosterZ

+0

तो आपको वास्तव में डिबगिंग शुरू करने की आवश्यकता है। ग्रहण में डीडीएमएस दृश्य को देखें - आपको वास्तविक स्टैकट्रस देखना चाहिए। यह बहुत अच्छी तरह से एक NullPointerException हो सकता है ... –

+0

मैंने एक नई बात देखी है, मैं NetBeans में एक ही चीज़ चिपकाया है और यह पूरी तरह से भाग गया ... अभी भी ग्रहण के साथ समस्या नहीं मिल रहा है .. – FosterZ

0

आपको शायद इसे वास्तविक डिवाइस पर परीक्षण करने की आवश्यकता है। मुझे एक ही समस्या का सामना करना पड़ा और यह वास्तविक डिवाइस पर काम किया। कॉलिंग और जीपीएस दोनों कभी-कभी एवीडी में अपेक्षित काम नहीं करते हैं।

2

एपीआई 24

Intent intent = new Intent(Intent.ACTION_CALL); 
    intent.setData(Uri.parse("tel:+94720999666")); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    startActivity(intent); 

और भी जोड़

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

समस्या आप उपयोगकर्ता से अनुमति का अनुरोध नहीं किया है। यदि डिवाइस एंड्रॉइड 6.0 (एपीआई लेवल 23) चला रहा है और ऐप का लक्ष्य एसडीकेवर्सन 23 या उच्चतर है, तो कॉल अनुमति को खतरनाक अनुमति माना जाएगा। इसलिए आपको पहले सही अनुमति मिलनी चाहिए। सबसे पहले अपनी AndroidManifest.xml फ़ाइल में

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.android.app.myapp" > 
     <uses-permission android:name="android.permission.CALL_PHONE" /> 
     ... 
    </manifest> 

जोड़ें।

फिर, मेरे पास एक बटन क्लिक करके एक विधि कहा जाता है।

public void onCall(View view) { 
      Intent callIntent = new Intent(Intent.ACTION_CALL); //use ACTION_CALL class 
      callIntent.setData(Uri.parse("tel:0800000000")); //this is the phone number calling 
      //check permission 
      //If the device is running Android 6.0 (API level 23) and the app's targetSdkVersion is 23 or higher, 
      //the system asks the user to grant approval. 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
       //request permission from user if the app hasn't got the required permission 
       ActivityCompat.requestPermissions(this, 
         new String[]{Manifest.permission.CALL_PHONE}, //request specific permission from user 
         10); 
       return; 
      }else {  //have got permission 
       try{ 
        startActivity(callIntent); //call activity and make phone call 
       } 
       catch (android.content.ActivityNotFoundException ex){ 
        Toast.makeText(getApplicationContext(),"yourActivity is not founded",Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
संबंधित मुद्दे