প্রোগ্রামক্রমে অ্যান্ড্রয়েড ফোনের ফোন নম্বরটি পান


443

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি চলছে এমন ডিভাইসের ফোন নম্বরটি আমি কীভাবে প্রোগ্রামিয়ালি পেতে পারি?


আপনি নিজের দ্বারা এটি প্রবেশ করানো ব্যতীত এটি সম্ভব নয়। ফোন নম্বরটি মোবাইল বা সিম দ্বারা জানে না, কেবল নেটওয়ার্কের মাধ্যমে ....
টমসফট

3
@ টমসফট এটি সম্পর্কে চিন্তা করুন ... ফেসবুকের মতো অ্যাপস কীভাবে আপনার ফোন নম্বরটি স্বয়ংক্রিয়ভাবে যাচাই করে ..?
এডি হার্ট

1
@ টমসফ্ট না, বেশিরভাগ সময় এটি আপনার ফোন নম্বরও জিজ্ঞাসা করে না, বা যদি তা করে তবে বাক্সটি পূর্বনির্ধারিত।
এডি হার্ট

1
@ টমসফট ওয়েল, আমি অন্য দিন ফেসবুকের জন্য সাইন আপ করেছি, এবং যখন এটি আমাকে একটি কোড টেক্সট করে তখন এটি আমার নম্বর জিজ্ঞাসা করে না। চেষ্টা করে দেখুন ;)
এডি হার্ট

1
@ এডি হার্ট এটিও করুন, এবং আমাকে আমার ফোন নম্বর জিজ্ঞাসা করা হয়েছে। সুতরাং এটি নিশ্চিত হয়ে যায় যে সাধারণভাবে বলতে গেলে, এটি অ্যাক্সেসযোগ্য নয় এবং কিছু অপারেটর সেটআপে এই তথ্য যুক্ত করতে পারে তবে এটি কোনও জিএমএস মান বৈশিষ্ট্য নয়
tomsoft

উত্তর:


484

কোড:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

প্রয়োজনীয় অনুমতি:

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

আদেশ সহকারে:

উচ্চ আপত্তিকর মন্তব্য অনুসারে, সচেতন হওয়ার মতো কয়েকটি সতর্কতা রয়েছে। এই আসতে পারেন nullবা ""বা এমনকি "???????", এবং এটি যে আর বৈধ একটি মামুলি ফোন নম্বর ফিরে আসতে পারেন। আপনি যদি এমন কিছু চান যা ডিভাইসটিকে স্বতন্ত্রভাবে সনাক্ত করে, তার getDeviceId()পরিবর্তে আপনার ব্যবহার করা উচিত ।


150
আসলে, এত নিখুঁত। গতবার যখন আমি এই পদ্ধতিটি চেষ্টা করেছিলাম তখন এটি আমার পুরানো মোবাইল নম্বরটি পোর্ট করার আগে ফোনটি জানিয়েছিল যে আমার ফোনটি মূলত ছিল। এটি সম্ভবত এখনও রয়েছে, সেটিংস অ্যাপ্লিকেশনটি এখনও সেই অকার্যকর নম্বরটি দেখায়। এছাড়াও, আরও শোনা যাচ্ছে যে কিছু সিম এই পদ্ধতি ফিরে আসার কারণ null। এটি বলা হচ্ছে, আমি এর চেয়ে ভাল উত্তর সম্পর্কে সচেতন নই।
কমন্সওয়্যার

4
চিহ্ন ঠিক আছে। যদি ফোনটি অনন্যভাবে চিহ্নিত করে এমন কিছু ব্যবহার করার অভিপ্রায় আমি getDeviceId () ব্যবহার করব যা জিএসএম এর জন্য আইএমইএ ফিরিয়ে দেবে।
অ্যালেক্স ভলভয়

15
(আমি মনে করি আপনি আইএমইআই ...?)
চেইমকুট

23
ঠিক আছে, আমি এটিকে অ্যান্ড্রয়েড ওএস ২.২ সহ নেক্সাস ওনে পরীক্ষা করেছিলাম এবং এটি বাতিল হয়ে যায়
ওমর রেহমান

43
বিকাশকারীরা ভোট গণনা বিবেচনা করে এটি সঠিক উত্তর বলে মনে করতে পারেন। বিকাশকারীকে সতর্ক করতে একটি নোট যুক্ত করা উচিত যে এই পদ্ধতিটি সর্বদা ফোন নম্বর দেয় না।
হবিব পারওয়াদ

151

এই সমস্যার কোনও গ্যারান্টিযুক্ত সমাধান নেই কারণ ফোন নম্বরটি সমস্ত সিম-কার্ডে শারীরিকভাবে সঞ্চয় করা হয় না, বা নেটওয়ার্ক থেকে ফোনে সম্প্রচারিত হয়। এটি বিশেষত সত্য কিছু দেশে, যেখানে দৈনিক ঠিকানার যাচাইকরণের প্রয়োজন হয়, কেবলমাত্র অ্যাসাইনমেন্ট পরে ঘটে থাকে। ফোন নম্বর অ্যাসাইনমেন্টটি নেটওয়ার্কে ঘটে - এবং সিম কার্ড বা ডিভাইস পরিবর্তন না করে পরিবর্তন করা যেতে পারে (উদাহরণস্বরূপ পোর্টিং সমর্থনযোগ্য)।

আমি জানি এটি ব্যথা, তবে সম্ভবত সবচেয়ে ভাল সমাধান হ'ল কেবল ব্যবহারকারীকে তার ফোন নম্বরটি একবার প্রবেশ করানো এবং এটি সঞ্চয় করতে বলা।


18
নেওয়া নম্বরটি যাচাই করার জন্য, আপনি সংখ্যায় একটি এসএমএস (একটি কোডযুক্ত) প্রেরণ করতে পারেন এবং "android.provider.Telephony.SMS_RECEIVED" এ শ্রোতা রেখে প্রতিক্রিয়াটি নিয়ন্ত্রণ করতে পারেন। এইভাবে আপনি সংখ্যাটি সঠিক এবং কাজ করছে তা নিশ্চিত করতে পারেন
হোসেইন শাহদুস্ট

1
সৃজনশীল সমাধান, তবে আপনি সম্ভবত ব্যবহারকারীকে জানাতে চাইবেন যে কেবলমাত্র যদি তার জন্য এই চার্জ নেওয়া হয় তবে আপনি এটি করছেন।
নরম্যান এইচ

3
সরল পাঠ্য বার্তা প্রাপ্তির জন্য চার্জ দেওয়ার কোনও ব্যবস্থা আছে কি ?!
চোরমাস্টার

9
হ্যাঁ একেবারে. আমি আমার পরিকল্পনায় টেক্সটিং যুক্ত করার আগে আমাকে প্রাপ্ত টেক্সট বার্তার জন্য $ 0.30 নেওয়া হয়েছিল। কানাডায় রজার্স।
জন ক্রয়েচ

44

আপডেট: এই উত্তরটি আর উপলভ্য নয় কারণ হোয়াটসঅ্যাপ ফোন নম্বরটি অ্যাকাউন্টের নাম হিসাবে প্রকাশ করা বন্ধ করে দিয়েছিল, দয়া করে উত্তরটি উপেক্ষা করুন।

টেলিফোনি পরিষেবার মাধ্যমে যদি আপনি এটি না পান তবে আসলে একটি বিকল্প সমাধান আপনি বিবেচনা করতে চাইতে পারেন।

আজকের হিসাবে, আপনি ব্যবহার করে আরও একটি বড় অ্যাপ্লিকেশন হোয়াটসঅ্যাপের উপর নির্ভর করতে পারেন AccountManager। কয়েক মিলিয়ন ডিভাইসে এই অ্যাপ্লিকেশনটি ইনস্টল করা আছে এবং যদি আপনি TelephonyManagerএই মাধ্যমে ফোন নম্বরটি না পান তবে আপনি এটি শট দিতে পারেন।

অনুমতি:

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

কোড:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

actypeহোয়াটসঅ্যাপ অ্যাকাউন্টের জন্য পরীক্ষা করুন

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

ব্যবহারকারী যদি হোয়াটসঅ্যাপ ইনস্টল না করে তবে আপনি এটি পেতে পারেন না, তবে যাইহোক চেষ্টা করার মতো এটি worth এবং মনে রাখবেন আপনার ব্যবহারকারীকে সর্বদা নিশ্চিতকরণের জন্য জিজ্ঞাসা করা উচিত।


1
আমি আজই এটি দেখেছিলাম যখন আমি অ্যাকাউন্টগুলির সাথে ঘোরাঘুরি করছিলাম। এটি বেশ খারাপ যে সংখ্যাটি এর মতো প্রকাশ করা হয়েছিল। অবশ্যই, আপনার GET_ACCOUNTS অনুমতি প্রয়োজন এবং সেই মুহুর্তে ব্যবহারকারী সম্ভবত অ্যাপ্লিকেশনটির কী অনুমতি রয়েছে তা যত্ন করে না।
জারজেট

9
এই সমাধানটির মেয়াদ শেষ হয়ে গেছে, হোয়াটসঅ্যাপ অ্যাকসেন্ট নামে ফোন নম্বরটি আর সংরক্ষণ করে না, আপনি কী জানেন যে নতুন আপডেটের পরে হোয়াটসঅ্যাপ ফোন নম্বরটি কোথায় সংরক্ষণ করে?
কোহেলাড

@ কহিলাদ আমাকে আপডেট করার জন্য ধন্যবাদ, আমার পরে একটি চেক হবে এবং নিশ্চিত হয়ে যাওয়ার পরে এই উত্তরটি পেরিয়ে যাব, ইতিমধ্যে আমি জানি না তারা কোথায় নম্বরটি সংরক্ষণ করবে
চোর ওয়াই চুন

3
তবে ভাইবারের সংখ্যাটি এক্সপোজ! com.viber.voip.account
xgnyg

32

আমার আগের উত্তর পোস্ট হিসাবে

নীচে কোড ব্যবহার করুন:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে, নিম্নলিখিত অনুমতি দিন:

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

তবে মনে রাখবেন, এই কোডটি সর্বদা কার্যকর হয় না, যেহেতু সেল ফোন নম্বর সিম কার্ড এবং নেটওয়ার্ক অপারেটর / সেল ফোন ক্যারিয়ারের উপর নির্ভরশীল।

এছাড়াও, ফোন -> সেটিংস -> সম্পর্কে -> ফোন পরিচয় পরীক্ষা করে দেখুন , আপনি যদি সেখানে নম্বরটি দেখতে সক্ষম হন তবে উপরের কোড থেকে ফোন নম্বর পাওয়ার সম্ভাবনা বেশি। আপনি যদি সেটিংসে ফোন নম্বর দেখতে সক্ষম না হন তবে আপনি এই কোডটির মাধ্যমে পেতে সক্ষম হবেন না!

প্রস্তাবিত কর্মফল:

  1. ব্যবহারকারীর ম্যানুয়াল ইনপুট হিসাবে ব্যবহারকারীর ফোন নম্বর পান।
  2. এসএমএসের মাধ্যমে ব্যবহারকারীর মোবাইল নম্বরে একটি কোড প্রেরণ করুন।
  3. ফোন নম্বরটি নিশ্চিত করতে ব্যবহারকারীকে কোড প্রবেশ করতে বলুন।
  4. ভাগ করে নেওয়া পছন্দটিতে নম্বরটি সংরক্ষণ করুন।

অ্যাপের প্রথম প্রবর্তনের সময় ওয়ান টাইম ক্রিয়াকলাপ হিসাবে উপরের 4 টি পদক্ষেপ করুন। পরবর্তী সময়ে, যখনই ফোন নম্বর প্রয়োজন হয়, ভাগ করা পছন্দগুলিতে উপলব্ধ মানটি ব্যবহার করুন।


এই উত্তরটি সমস্ত কারণকে কভার করে, এটি গ্রহণযোগ্য হওয়া উচিত =)
স্লাভা ফমিন II

ফোনে ডুয়াল সিম পাওয়া গেলে আমি কীভাবে উভয় মোবাইল নম্বর পেতে পারি। উপরের কোড সহ। একক সিমের জন্য এটির কার্যকরী সূক্ষ্ম
অমৃত চক্রধারী

26

সুতরাং আপনি অনুমতি এবং হ্যাক ছাড়াই প্লে পরিষেবাদি এপিআইয়ের মাধ্যমে কোনও ফোন নম্বরটির অনুরোধ করছেন। উত্স এবং সম্পূর্ণ উদাহরণ

আপনার বিল্ডড্রেডলে (সংস্করণ 10.2.x এবং উচ্চতর প্রয়োজনীয়):

compile "com.google.android.gms:play-services-auth:$gms_version"

আপনার ক্রিয়াকলাপে (কোডটি সরল করা হয়েছে):

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.CREDENTIALS_API)
            .build();
    requestPhoneNumber(result -> {
        phoneET.setText(result);
    });
}

public void requestPhoneNumber(SimpleCallback<String> callback) {
    phoneNumberCallback = callback;
    HintRequest hintRequest = new HintRequest.Builder()
            .setPhoneNumberIdentifierSupported(true)
            .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);
    try {
        startIntentSenderForResult(intent.getIntentSender(), PHONE_NUMBER_RC, null, 0, 0, 0);
    } catch (IntentSender.SendIntentException e) {
        Logs.e(TAG, "Could not start hint picker Intent", e);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PHONE_NUMBER_RC) {
        if (resultCode == RESULT_OK) {
            Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
            if (phoneNumberCallback != null){
                phoneNumberCallback.onSuccess(cred.getId());
            }
        }
        phoneNumberCallback = null;
    }
}

এটি এর মতো একটি ডায়ালগ তৈরি করবে:

এখানে চিত্র বর্ণনা লিখুন


2
ইঙ্গিত অনুরোধ ফোনের সাথে সংযুক্ত ইমেল অ্যাকাউন্ট থেকে ফোন নম্বর দেখায়, ডিভাইসে কোনও সিম না থাকলেও এটি ড্রপ ডাউন দেখায়।
এরি

একটি মাত্র সিম থাকা অবস্থায় ডায়ালগটি কীভাবে একাধিক সংখ্যা দেখায়? আমার জন্য, এটি 5 নম্বর দেখায়। : / :)
সিজিআর

অ্যান্ড্রয়েডে আমরা কীভাবে প্রথম ফোন নম্বরটি নির্বাচন করতে পারি?
নুরুল

13
private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s != null && s.length() > 2 ? s.substring(2) : null;
}

Http://www.androidsnippets.com/get-my- iPhone- number থেকে নেওয়া কোড


"এস.এসবস্ট্রিং (2)" এর কারণে @ জারেডবুরোস
কুকি মনস্টার

1
এটা আমার পক্ষে কাজ করছে না আমি একটি নুল মান (সূর্যোদয় সিম কার্ড, সুইজারল্যান্ড) পেয়েছি
ই-প্রকৃতি

আপনার লিঙ্কটি নষ্ট হয়ে গেছে
ñmañg årmån

11

একটি নতুন অ্যান্ড্রয়েড এপিআই রয়েছে যা ব্যবহারকারীর অনুমতি ছাড়াই তাদের ফোনেম্বার নির্বাচন করতে দেয়। একবার দেখুন: https://android-developers.googleblog.com/2017/10/effective- iPhone-number-verifications.html

// Construct a request for phone numbers and show the picker
private void requestHint() {
    HintRequest hintRequest = new HintRequest.Builder()
       .setPhoneNumberIdentifierSupported(true)
       .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
        apiClient, hintRequest);
    startIntentSenderForResult(intent.getIntentSender(),
        RESOLVE_HINT, null, 0, 0, 0);
} 

এটির জন্য ফায়ারবেস দরকার
ভ্লাদ

পছন্দ করেছেন এটির জন্য কেবলমাত্র Google Play পরিষেবাদি প্রয়োজন যা বেশিরভাগ ডিভাইস সহ আসে। ব্লগপোস্টের উদ্ধৃতি: 'আপনি শুরু করার আগে আপনাকে এটি তৈরি করতে এবং পরীক্ষা করতে হবে এটি এমন একটি ফোন নম্বর সহ একটি ডিভাইস যা এসএমএস পেতে পারে এবং গুগল প্লে পরিষেবাগুলি 10.2.x এবং এর চেয়েও বেশি চালায়' '
ঘোরাঘুরি

9

উপরের উত্তরগুলিতে উপরের ব্যাখ্যাগুলিতে এখানে কিছুটা যুক্ত করতে চাই। যা অন্যের জন্যও সময় সাশ্রয় করবে।

আমার ক্ষেত্রে এই পদ্ধতিটি কোনও মোবাইল নম্বর ফিরিয়ে দেয়নি, একটি খালি স্ট্রিং ফিরে আসল। কেসটির কারণে আমি আমার সিমটি নতুন সিমটিতে পোর্ট করেছিলাম। সুতরাং আমি যদি সেটিংস> ফোন সম্পর্কে> স্থিতি> আমার ফোন নম্বরে যাই তবে এটি আমাকে "অজানা" দেখায়।


আমারও, এই অবস্থাটা কী? ঘুরে বেরানো? অথবা সম্ভবত সিমকার্ডের মধ্যে কেবল এটির নম্বর নেই।
আলেকজান্দার মার্কন্ডস

8

কখনও কখনও নীচে কোড ফেরত দেয় nullবা ফাঁকা স্ট্রিং।

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

নীচে অনুমতি সহ

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

আপনি নিজের ফোন নম্বর পেতে সক্ষম হবেন এমন আরও একটি উপায় রয়েছে, আমি একাধিক ডিভাইসে এটি পরীক্ষা করেছি না তবে উপরের কোডটি প্রতিবার কাজ করছে না।

কোড নীচে চেষ্টা করুন:

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
        main_data, "mimetype=?",
        new String[]{"vnd.android.cursor.item/phone_v2"},
        "is_primary DESC");
if (object != null) {
    do {
        if (!((Cursor) (object)).moveToNext())
            break;
        // This is the phoneNumber
        String s1 = ((Cursor) (object)).getString(4);
    } while (true);
    ((Cursor) (object)).close();
}

আপনাকে এই দুটি অনুমতি যুক্ত করতে হবে।

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

আশা করি এটি সাহায্য করে, ধন্যবাদ!


আমি কি জিজ্ঞাসা করতে পারি: দ্বিতীয় স্নিপেটে কোনটি সেল নম্বর?
আইওএসএন্ড্রয়েডউইনডোমোবাইল অ্যাপ্লিকেশনসদেভ

1
মানটি String s1ফোন নম্বর হবে।
activsince93

এই কোডটি আমার পক্ষে কাজ করছে না। (আপনার শেষ কোড স্নিপেট) খালি স্ট্রিং দেয়।
ক্রিস্টি ওয়েলশ

আপনার উত্তর ব্যাখ্যা করুন। নম্বরটি কোথায় সংরক্ষণ করা হয় এবং এতে কীভাবে নম্বর থাকে? কিসের উপর নির্ভরশীল?
not2qubit

3
@ not2qubit আমি মনে করি এটি যোগাযোগ অ্যাপ্লিকেশনটিতে নিজের যোগাযোগের অ্যাক্সেস করছে
সাম্প্লেশন

4

এটি আরও সরলিকৃত উত্তর:

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}

3

সবার আগে মোবাইল নম্বর প্রাপ্তি নৈতিক নীতিবিরোধী, আগে এটি সম্ভব ছিল তবে এখন আমার গবেষণা অনুসারে এর জন্য কোনও ठोस সমাধান পাওয়া যায় না, কিছু কোড ব্যবহার করে মোবাইল নম্বর পাওয়া সম্ভব তবে কোনও গ্যারান্টি নাও কার্যকর হতে পারে শুধুমাত্র কয়েকটি ডিভাইসে অনেক গবেষণার পরে আমি কেবল তিনটি সমাধান পেয়েছি তবে তারা সমস্ত ডিভাইসে কাজ করছে না।

আমরা পাচ্ছি না তার নিম্নলিখিত কারণ রয়েছে।

1. অ্যান্ড্রয়েড ডিভাইস এবং নতুন সিম কার্ড মোবাইল নম্বর স্টোরেজ করে না যদি মোবাইল নম্বর ডিভাইসে এবং সিমে না পাওয়া যায় তবে কীভাবে নম্বর পাওয়া সম্ভব, যদি কোনও পুরানো সিম কার্ডের মোবাইল নম্বর থাকে তবে টেলিফোনি ম্যানেজার ব্যবহার করে আমরা অন্য নম্বরটি পেতে পারি এটি "নাল" বা "" বা "??????" ফিরিয়ে দেবে

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

 TelephonyManager tel= (TelephonyManager)this.getSystemService(Context.
            TELEPHONY_SERVICE);
    String PhoneNumber =  tel.getLine1Number();

দ্রষ্টব্য: - আমি নিম্নলিখিত ডিভাইস মটো এক্স, স্যামসাং ট্যাব 4, স্যামসাং এস 4, নেক্সাস 5 এবং রেডমি 2 প্রাইমগুলিতে এই সমাধানটি পরীক্ষা করেছি তবে প্রতিবার খালি স্ট্রিং ফিরে আসার ফলে এটি কাজ করে না সুতরাং উপসংহারটি অকেজো

  1. এই পদ্ধতিটি কেবল রেডমি 2 প্রাইমে কাজ করছে তবে এর জন্য ম্যানিফেস্টে পড়ার জন্য যোগাযোগের অনুমতি যুক্ত করা দরকার।

দ্রষ্টব্য: - এটিও গ্যারান্টিযুক্ত এবং দক্ষ সমাধান নয়, আমি এই সমাধানটি অনেক ডিভাইসে পরীক্ষা করেছি তবে এটি কেবল রেডমি 2 প্রাইমে কাজ করেছে যা ডুয়াল সিম ডিভাইস এটি আমাকে দুটি মোবাইল নম্বর দেয় প্রথমটি সঠিক তবে দ্বিতীয়টি নয় এটি আমার দ্বিতীয় সিমের সাথে সম্পর্কিত এটি আমার কিছু পুরানো সিম কার্ডের সাথে সম্পর্কিত যা আমি ব্যবহার করছি না।

 String main_data[] = {"data1", "is_primary", "data3", "data2", "data1",
            "is_primary", "photo_uri", "mimetype"};
    Object object = getContentResolver().
            query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
            main_data, "mimetype=?",
            new String[]{"vnd.android.cursor.item/phone_v2"},
            "is_primary DESC");
    String s1="";
    if (object != null) {
        do {
            if (!((Cursor) (object)).moveToNext())
                break;
            // This is the phoneNumber
             s1 =s1+"---"+ ((Cursor) (object)).getString(4);
        } while (true);
        ((Cursor) (object)).close();
    }
  1. আমার গবেষণায় আমি আগে খুঁজে পেয়েছি হোয়াটসঅ্যাপ অ্যাকাউন্ট ব্যবহার করে মোবাইল নম্বর পাওয়া সম্ভব ছিল তবে এখন নতুন হোয়াটসঅ্যাপ সংস্করণ ব্যবহারকারীর মোবাইল নম্বর সংরক্ষণ করে না।

উপসংহার : - অ্যান্ড্রয়েডের ব্যবহারকারীর মোবাইল নম্বর প্রোগ্রামগতভাবে পাওয়ার কোনও গ্যারান্টিযুক্ত সমাধান নেই।

পরামর্শ : - ১. আপনি যদি ব্যবহারকারীর মোবাইল নম্বর যাচাই করতে চান তবে ব্যবহারকারীকে তার নম্বর সরবরাহ করতে বলুন, ওটিপি ব্যবহার করে আপনি এটি যাচাই করতে পারবেন।

  1. আপনি যদি ব্যবহারকারীর ডিভাইসটি সনাক্ত করতে চান তবে এর জন্য আপনি সহজেই ডিভাইস আইএমইআই নম্বর পেতে পারেন।

2

TelephonyManagerসঠিক সমাধান নয়, কারণ কিছু ক্ষেত্রে সিমটি নম্বর সংরক্ষণ করা হয় না। আমি আপনাকে পরামর্শ দিচ্ছি যে অ্যাপ্লিকেশনটি প্রথমবার খোলা থাকার জন্য ব্যবহারকারীর ফোন নম্বর সংরক্ষণ করার জন্য আপনার ভাগ করা পছন্দটি ব্যবহার করা উচিত এবং যখনই আপনার প্রয়োজন হবে নম্বরটি ব্যবহার করা হবে।


1
তবে এই পদ্ধতিটি ত্রুটিযুক্ত প্রবণ ser ব্যবহারকারী ভুল নম্বর লিখতে পারে।
জোহরা খান

3
হ্যাঁ তাই এই উদ্দেশ্যে আমি একটি পাঠ্য বার্তা ব্যবহার করেছি, যখন ব্যবহারকারী কোনও নম্বর প্রবেশ করান, তাই এসএমএস ম্যানেজার থেকে অ্যাপ মেসেজটি নিজেই শুরু করে এবং এর মাধ্যমে আমরা এসএমএসের রিসিভারটি ব্যবহার করতে পারি আসল নম্বরটি পেতে
নাভিদ আহমদ

1
আমার আরও একটি প্রশ্ন আছে .. এই পদ্ধতির সাথে ব্যবহারকারীর দ্বারা প্রদত্ত একটি এসএমএস চার্জ হবে (যদি এটি কোনও টোল ফ্রি নম্বর না হয়) .. অন্য কোনও পদ্ধতি আছে যা আমি ব্যবহারকারীর ফোন পেতে পারি না?
জোহরা খান

হ্যা অফ অফ কোর্সটি যদি কোনও টোল ফ্রি নম্বর না হয় তবে সেই এসএমএসে কিছু চার্জ লাগবে।
নাভেদ আহমেদ

নাহ আমি এখন পর্যন্ত টেলিফোনি ম্যানেজার ছাড়া এমন কোনও পদ্ধতি নেই বলে মনে করি। এবং আমি আমার উত্তরে টেলিফোন ম্যানেজারের সমস্যাটি চিহ্নিত করেছি।
নাভেদ আহমদ

2

আমি যে সমাধানগুলি পেয়েছি তার সংমিশ্রণটি এখানে রয়েছে (নমুনা প্রকল্পটি এখানে , আপনি যদি স্বয়ংক্রিয় পূরণও পরীক্ষা করতে চান তবে):

স্পষ্ট

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

build.gradle

    implementation "com.google.android.gms:play-services-auth:17.0.0"

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var googleApiClient: GoogleApiClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tryGetCurrentUserPhoneNumber(this)
        googleApiClient = GoogleApiClient.Builder(this).addApi(Auth.CREDENTIALS_API).build()
        if (phoneNumber.isEmpty()) {
            val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
            val intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest)
            try {
                startIntentSenderForResult(intent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0);
            } catch (e: IntentSender.SendIntentException) {
                Toast.makeText(this, "failed to show phone picker", Toast.LENGTH_SHORT).show()
            }
        } else
            onGotPhoneNumberToSendTo()

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_PHONE_NUMBER) {
            if (resultCode == Activity.RESULT_OK) {
                val cred: Credential? = data?.getParcelableExtra(Credential.EXTRA_KEY)
                phoneNumber = cred?.id ?: ""
                if (phoneNumber.isEmpty())
                    Toast.makeText(this, "failed to get phone number", Toast.LENGTH_SHORT).show()
                else
                    onGotPhoneNumberToSendTo()
            }
        }
    }

    private fun onGotPhoneNumberToSendTo() {
        Toast.makeText(this, "got number:$phoneNumber", Toast.LENGTH_SHORT).show()
    }


    companion object {
        private const val REQUEST_PHONE_NUMBER = 1
        private var phoneNumber = ""

        @SuppressLint("MissingPermission", "HardwareIds")
        private fun tryGetCurrentUserPhoneNumber(context: Context): String {
            if (phoneNumber.isNotEmpty())
                return phoneNumber
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val subscriptionManager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
                try {
                    subscriptionManager.activeSubscriptionInfoList?.forEach {
                        val number: String? = it.number
                        if (!number.isNullOrBlank()) {
                            phoneNumber = number
                            return number
                        }
                    }
                } catch (ignored: Exception) {
                }
            }
            try {
                val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
                val number = telephonyManager.line1Number ?: ""
                if (!number.isBlank()) {
                    phoneNumber = number
                    return number
                }
            } catch (e: Exception) {
            }
            return ""
        }
    }
}

PL এই উত্তরে মন্তব্য দেখতে stackoverflow.com/a/48210130/5457916 , এই পদ্ধতি বাস্তবায়নের আগে
humble_wolf

আপনার দেওয়া লিঙ্কটি আমি এখানে যা করেছি তার কেবলমাত্র একটি অংশ। এখানে আমি প্রথমে এটি স্বয়ংক্রিয়ভাবে পূরণ করার চেষ্টা করেছি। এবং এই জন্য ফ্যালব্যাক আছে।
অ্যান্ড্রয়েড বিকাশকারী 13

আমি জানি স্যার, আপনার উত্তরটি দুর্দান্ত এবং কোনও অর্থে ভুল নয়, আমি কেবল পাঠকদের এই পরিস্থিতিতে যে পরিস্থিতিগুলি সম্পর্কে সচেতন হতে চেয়েছিলাম, উদাহরণস্বরূপ এটি মন্তব্যগুলিতে উল্লিখিত আপনার গুগল অ্যাকাউন্ট ইত্যাদির সাথে সম্পর্কিত সংখ্যাটি তৈরি করতে পারে।
বিনীত_উল্ফ

আমি যা লিখেছি তা এখনও পছন্দ করি। দুঃখিত
অ্যান্ড্রয়েড বিকাশকারী 23

1

একটু অবদান। আমার ক্ষেত্রে, কোডটি একটি ত্রুটি ব্যতিক্রম চালু করেছে। কোডটি চালানোর জন্য এবং সেই সমস্যাটি সমাধান করার জন্য আমার একটি এ্যানোটেশন লাগানো দরকার। এখানে আমি এই কোড দিন।

public static String getLineNumberPhone(Context scenario) {
    TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
    @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
    return mPhoneNumber;
}

0

যদিও আপনার নিজের নম্বর থেকে কল করার সময় একাধিক ভয়েসমেইল অ্যাকাউন্ট থাকা সম্ভব, ক্যারিয়ারগুলি আপনাকে ভয়েসমেলে নিয়ে যায়। সুতরাং, TelephonyManager.getVoiceMailNumber()বা TelephonyManager.getCompleteVoiceMailNumber()আপনার প্রয়োজনীয় গন্ধের উপর নির্ভর করে।

আশাকরি এটা সাহায্য করবে.


5
কোনও "getCompleteVoiceMailNumber" ফাংশন নেই, এবং getVoiceMailNumber () ফোনের আসল নম্বর থেকে পৃথক একটি নম্বর প্রদান করে।
অ্যান্ড্রয়েড বিকাশকারী 21

এটি এমন একটি কৌশল যা বিশ্বের কয়েকটি মোবাইল অপারেটর নিয়ে কাজ করে works তবে প্রযুক্তিগতভাবে কার্যকরী হতে পারে।
টেকনিক

0

এই নির্ভরতা যুক্ত করুন: implementation 'com.google.android.gms:play-services-auth:18.0.0'

ফোন নম্বর তালিকা আনতে এটি ব্যবহার করুন:

val hintRequest = HintRequest.Builder()
    .setPhoneNumberIdentifierSupported(true)
    .build()

val intent = Credentials.getClient(context).getHintPickerIntent(hintRequest)

startIntentSenderForResult(
    intent.intentSender,
    PHONE_NUMBER_FETCH_REQUEST_CODE,
    null,
    0,
    0,
    0,
    null
)

প্লে পরিষেবা সংলাপে আলতো চাপার পরে:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent? { 
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == PHONE_NUMBER_FETCH_REQUEST_CODE) {
        data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)?.id?.let { 
            useFetchedPhoneNumber(it)
        }
    }
}

-6

সুরক্ষা অ্যাপে কাজ করার সময় যা আমার ফোন তাদের হাতের মুঠোয় যেতে পারে তার ফোন নম্বর পাওয়ার প্রয়োজন ছিল, আমাকে এটি করতে হয়েছিল; 1. বুটটি সম্পূর্ণ হয়েছে এবং তারপরে টেলিফোনি ম্যানেজার থেকে লাইন 1_ নাম্বার নেওয়ার চেষ্টা করুন যা একটি স্ট্রিং ফলাফল দেয়। ২.আপনার স্ট্রিং ফলাফলটি আমার নিজের ফোন নম্বরের সাথে তুলনা করুন এবং সেগুলির সাথে মেলে না বা স্ট্রিংটি যদি শূন্য হয়ে যায়, ৩. গোপনে স্ট্রিং রেজাল্ট সম্বলিত একটি এসএমএস আমার অফিস নম্বরে একটি বিশেষ চিহ্ন সহ প্রেরণ করুন। ৪. যদি বার্তা প্রেরণ ব্যর্থ হয় তবে কোনও পরিষেবা শুরু করুন এবং প্রেরিত এসএমএসের মুলতুবি প্রত্যাবর্তন সফল হওয়া অবধি প্রতিটি ঘন্টা চেষ্টা করে চলুন। এই পদক্ষেপের সাহায্যে আমি আমার হারিয়ে যাওয়া ফোনটি ব্যবহার করে এমন ব্যক্তির নম্বর পেতে পারি। ব্যক্তির চার্জ করা হলেও তাতে কিছু আসে যায় না।


ডাউনভোটস কেন?
বিনীত_ ওল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.