অ্যান্ড্রয়েডে কীভাবে একটি ফোন কল করবেন এবং কলটি করা হয়ে গেলে আমার ক্রিয়াকলাপে ফিরে আসবেন?


129

আমি একটি ফোন কল করার জন্য একটি ক্রিয়াকলাপ চালু করছি, কিন্তু যখন আমি 'শেষ কল' বোতাম টিপছি তখন এটি আমার ক্রিয়াকলাপে ফিরে আসে না। আপনি কি দয়া করে আমাকে বলতে পারবেন যে 'কল কল' বোতাম টিপলে আমি কীভাবে একটি কল ক্রিয়াকলাপ চালু করতে পারি যা আমার কাছে ফিরে আসে? এইভাবে আমি ফোন কল করছি:

    String url = "tel:3334444";
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));

উত্তর:


106

কলটি কখন শেষ হবে তা দেখতে একটি ফোনস্টেটলাইস্টেনার ব্যবহার করুন। কলটি শুরুর জন্য অপেক্ষা করার জন্য আপনার সম্ভবত শ্রোতার ক্রিয়াকলাপগুলি ট্রিগার করতে হবে (PHONE_STATE_OFFHOOK থেকে আবার PHONE_STATE_IDLE এ পরিবর্তিত হওয়া পর্যন্ত অপেক্ষা করুন) এবং তারপরে আইডিএল অবস্থায় আপনার অ্যাপ্লিকেশনটিকে ফিরিয়ে আনতে কিছু কোড লিখুন।

আপনার অ্যাপটি পুনরায় চালু হয়েছে তা নিশ্চিত হওয়ার জন্য আপনাকে পরিষেবাতে শ্রোতা চালনার দরকার হতে পারে। কিছু উদাহরণ কোড:

EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);

শ্রোতার সংজ্ঞা:

private class EndCallListener extends PhoneStateListener {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        if(TelephonyManager.CALL_STATE_RINGING == state) {
            Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
        }
        if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
            //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call.
            Log.i(LOG_TAG, "OFFHOOK");
        }
        if(TelephonyManager.CALL_STATE_IDLE == state) {
            //when this state occurs, and your flag is set, restart your app
            Log.i(LOG_TAG, "IDLE");
        }
    }
}

আপনার Manifest.xmlফাইলে নিম্নলিখিত অনুমতি যুক্ত করুন:

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

10
অনুমতি ভুলে যাবেন না। ;)
জিপি 2 এমভি 3

5
জিপি 2 এমভি 3 যেমন উল্লেখ করেছে, অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে READ_PHONE_STATE অনুমতি যুক্ত করতে ভুলবেন না।
কুপার

6
@ মুনলাইটচিজ আপনি কি কল অ্যাপ থেকে আমাদের অ্যাপটিতে ফিরে আসতে কোড যুক্ত করতে পারেন?
গীক

এটি বিপজ্জনক কারণ কারণ আপনি যখনই কল করবেন প্রত্যেকবার এটি আপনার অ্যাপ্লিকেশন ক্রিয়াকলাপটি খুলবে
user924

49

এটি স্টার্টার জিজ্ঞাসা করা প্রশ্ন সম্পর্কিত।

আপনার কোডের সমস্যাটি হ'ল আপনি সঠিকভাবে নম্বরটি পাস করছেন না।

কোডটি হওয়া উচিত:

private OnClickListener next = new OnClickListener() {

     public void onClick(View v) {
        EditText num=(EditText)findViewById(R.id.EditText01); 
        String number = "tel:" + num.getText().toString().trim();
        Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(number)); 
        startActivity(callIntent);
    }
};

ম্যানিফেস্ট ফাইলে অনুমতি যুক্ত করতে ভুলবেন না।

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

অথবা

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

ক্ষেত্রে জরুরি নম্বর DIALব্যবহার করা হয়।


7
আপনার কোডটি মূল প্রশ্নের কোড থেকে কীভাবে আলাদা তা দেখতে আমার বেশ কষ্ট হচ্ছে
এলিয়াহ সাউনকাইন

কোডটি আলাদা নয়। আপনাকে ম্যানিফেস্ট ফাইলটিতে অনুমতি যুক্ত করতে হবে।
প্রিয়া

4
android.permission.CALL_PRIVILEGED অনুমতি কেবলমাত্র অ্যাপ্লিকেশন স্তরে উপলব্ধ নয় এমন অ্যাপ্লিকেশনগুলিকে দেওয়া হয়।
CoDe

এবং এইটা কি? এটি আপনার ক্রিয়াকলাপে ফিরে আসবে না
user924

24

আমাদের একই সমস্যা ছিল এবং PhoneStateListenerকলটি কবে শেষ হয় তা সনাক্ত করতে এটি ব্যবহার করে এটি সমাধান করতে সক্ষম হয়েছি, তবে অতিরিক্তভাবে finish()এটি আবার শুরু করার আগে আমাদের মূল ক্রিয়াকলাপটি করতে হয়েছিল startActivity, অন্যথায় কল লগটি সামনে ছিল।


4
আপনি অন্য একটি পদ্ধতি ব্যবহার করে এড়াতে পারবেন। যদি আপনি এমন একটি কন্টেন্টঅবার্সার তৈরি করেন যা অ্যান্ড্রয়েড কল লগ পর্যবেক্ষণ করে, তবে কল লগ পরিবর্তন না হওয়া পর্যন্ত অ্যাপটি শুরু হবে না। আমার অ্যাপ্লিকেশনটিতে কল লগ ডেটার প্রয়োজন ছিল এবং ফোনটি স্টেটলিস্টনারকে এই মডেলের পক্ষে ফেলতে হয়েছিল, এবং এই পরিবর্তনগুলি করার আগে শ্রোতা ফিরে আসছিল। পেস্টবিন.com
মুনলাইটচিজ

11
@ আন্দ্রে: আপনার লিঙ্কটি ভাঙা দেখা যাচ্ছে
সমষ্টি

আমি আপনাকে এক মিলিয়ন খ্যাতি দেব (যদি আমার অনেকটা থাকে :)) আমার দিনটি তৈরি করার জন্য ধন্যবাদ!
কিবিবি

1
লিংক নিয়ে সমস্যা আমি বলি!
ধীররাজ ভাস্কর

রেসকিউতে ইন্টারনেট সংরক্ষণাগার ... web.archive.org/web/20120123224619/http://umamao.com/questions/…
বেসিক

13

আচরণটি বর্ণিত (ফিনিস (), কল, পুনঃসূচনা) পেতে আমি এন্ডক্যাললিস্টনারের সর্বাধিক কার্যকরী উদাহরণ পেয়েছি, আমি কয়েকটি ভাগ করে নেওয়া পছন্দগুলি যুক্ত করেছি যাতে শ্রোতার এই আচরণটি পরিচালনা করার জন্য একটি রেফারেন্স থাকে।

আমার অনক্লিক, আরম্ভ এবং এন্ডক্যাললিস্টনার কেবলমাত্র অ্যাপ্লিকেশন থেকে কলগুলিতে সাড়া দেয়। অন্যান্য কল উপেক্ষা করা হয়েছে।

import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

public class EndCallListener extends PhoneStateListener {

private String TAG ="EndCallListener";
private int     LAUNCHED = -1;

SharedPreferences prefs = PreferenceManager
                            .getDefaultSharedPreferences(
                                myActivity.mApp.getBaseContext());

SharedPreferences.Editor _ed = prefs.edit();

@Override
    public void onCallStateChanged(int state, String incomingNumber) {
    String _prefKey = myActivity.mApp                          
                      .getResources().getString(R.string.last_phone_call_state_key),
    _bPartyNumber = myActivity.mApp                           
                      .getResources().getString(R.string.last_phone_call_bparty_key);

    int mLastCallState = prefs.getInt(_prefKey, LAUNCHED);

    //Save current call sate for next call
    _ed.putInt(_prefKey,state);
    _ed.commit();

        if(TelephonyManager.CALL_STATE_RINGING == state) {
            Log.i(TAG, " >> RINGING, number: " + incomingNumber);
        }
        if(TelephonyManager.CALL_STATE_IDLE == state && mLastCallState != LAUNCHED ) {
            //when this state occurs, and your flag is set, restart your app

            if (incomingNumber.equals(_bPartyNumber) == true) {
                //Call relates to last app initiated call
            Intent  _startMyActivity =  
               myActivity.mApp                               
               .getPackageManager()                                  
               .getLaunchIntentForPackage(
                 myActivity.mApp.getResources()
                 .getString(R.string.figjam_package_path));

_startMyActivity.setAction(                                     
        myActivity.mApp.getResources()
        .getString(R.string.main_show_phone_call_list));

                myActivity.mApp
                        .startActivity(_startMyActivity);
                Log.i(TAG, "IDLE >> Starting MyActivity with intent");
            }
            else
                Log.i(TAG, "IDLE after calling "+incomingNumber);

        }

    }
}

এগুলি strings.xML এ যুক্ত করুন

<string name="main_show_phone_call_list">android.intent.action.SHOW_PHONE_CALL_LIST</string>
<string name="last_phone_call_state_key">activityLpcsKey</string>
<string name="last_phone_call_bparty_key">activityLpbpKey</string>

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

  <activity android:label="@string/app_name" android:name="com.myPackage.myActivity" 
      android:windowSoftInputMode="stateHidden"
        android:configChanges="keyboardHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name="android.intent.action.SHOW_PHONE_CALL_LIST" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
  </activity>

এবং এগুলিকে আপনার 'আমার কার্যকলাপ' তে রাখুন

public static Activity mApp=null; //Before onCreate()
  ...
onCreate( ... ) {
  ...
if (mApp == null) mApp = this; //Links your resources to other classes
  ...
    //Test if we've been called to show phone call list
    Intent _outcome = getIntent();
    String _phoneCallAction = mApp.getResources().getString(R.string.main_show_phone_call_list);
    String _reqAction = _outcome.getAction();//Can be null when no intent involved

         //Decide if we return to the Phone Call List view
         if (_reqAction != null &&_reqAction.equals(_phoneCallAction) == true) {
                         //DO something to return to look and feel
         }

  ...
        myListView.setOnItemClickListener(new OnItemClickListener() { //Act on item when selected
             @Override
             public void onItemClick(AdapterView<?> a, View v, int position, long id) {

                 myListView.moveToPosition(position);
                 String _bPartyNumber = "tel:"+myListView.getString(myListView.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

                 //Provide an initial state for the listener to access.
                 initialiseCallStatePreferences(_bPartyNumber);

                 //Setup the listener so we can restart myActivity
                    EndCallListener _callListener = new EndCallListener();
                    TelephonyManager _TM = (TelephonyManager)mApp.getSystemService(Context.TELEPHONY_SERVICE);

                    _TM.listen(_callListener, PhoneStateListener.LISTEN_CALL_STATE);

                         Intent _makeCall = new Intent(Intent.ACTION_CALL, Uri.parse(_bPartyNumber));

                 _makeCall.setComponent(new ComponentName("com.android.phone","com.android.phone.OutgoingCallBroadcaster"));
                    startActivity(_makeCall);                           
                finish();
              //Wait for call to enter the IDLE state and then we will be recalled by _callListener
              }
        });


}//end of onCreate()

আমারঅ্যাক্টিভিটিতে আপনার অনক্লিকের জন্য আচরণ সূচনা করতে এটি ব্যবহার করুন যেমন অনক্রিটের পরে)

private void initialiseCallStatePreferences(String _BParty) {
    final int LAUNCHED = -1;
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
                                mApp.getBaseContext());
    SharedPreferences.Editor _ed = prefs.edit();

    String _prefKey = mApp.getString(R.string.last_phone_call_state_key),
           _bPartyKey = mApp.getString(R.string.last_phone_call_bparty_key);

    //Save default call state before next call
        _ed.putInt(_prefKey,LAUNCHED);
        _ed.putString(_bPartyKey,_BParty);
        _ed.commit();

}

আপনার সন্ধান করা উচিত যে ফোন নম্বরগুলির তালিকাতে ক্লিক করা আপনার ক্রিয়াকলাপ শেষ করে, নম্বরে কল করে এবং কলটি শেষ হয়ে গেলে আপনার অ্যাক্টিভিটিতে ফিরে আসে।

আপনার অ্যাপের বাইরে থাকা অবস্থায় কল করার পরেও আপনার অ্যাক্টিভিটি পুনরায় চালু হবে না (যদি না এটি শেষ বিপি পার্টির নাম্বারের মতো হয়)।

:)


5
দুঃখিত তবে এই কোডটি কিছুটা কুৎসিত দেখাচ্ছে। যদিও উত্তরের জন্য ধন্যবাদ
পিয়েরে

7

আপনি স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট () ব্যবহার করতে পারেন


1
অ্যান্ড্রয়েড 5.0 অনঅ্যাক্টিভিটিস রেজাল্ট পদ্ধতিটি ব্যবহার করার সাথে সাথে কল শুরু হয় তত্ক্ষণাত্ কল শুরু হয় !!
পানসিজ

6

এটি আমার দৃষ্টিকোণ থেকে সমাধান:

ok.setOnClickListener(this);
@Override
public void onClick(View view) {
    if(view == ok){
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + num));
        activity.startActivity(intent);

    }

অবশ্যই কার্যকলাপের (শ্রেণি) সংজ্ঞায় আপনাকে View.OnClickListener প্রয়োগ করতে হবে।


6

এখানে আমার উদাহরণটি দেওয়া হয়েছে, প্রথমে ব্যবহারকারী তার / সে ডায়াল করতে চান এমন নম্বরে লিখতে পারে এবং তারপরে একটি কল বোতাম টিপে ফোনে পরিচালিত হয়। কল বাতিল হওয়ার পরে ব্যবহারকারীকে পুনরায় আবেদনে প্রেরণ করা হবে। এটির জন্য এক্সএমএলটিতে বোতামটির একটি অনক্লিক পদ্ধতি থাকা উচিত (এই উদাহরণে 'মেকফোনকল')। আপনাকে ম্যানিফেস্টে অনুমতিও নিবন্ধন করতে হবে।

স্পষ্ট

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

কার্যকলাপ

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class PhoneCall extends Activity {

    EditText phoneTo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_phone_call);

        phoneTo = (EditText) findViewById(R.id.phoneNumber);

    }
    public void makePhoneCall(View view) {




        try {
            String number = phoneTo.getText().toString();
            Intent phoneIntent = new Intent(Intent.ACTION_CALL);
            phoneIntent.setData(Uri.parse("tel:"+ number));
            startActivity(phoneIntent);


        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(PhoneCall.this,
                    "Call failed, please try again later!", Toast.LENGTH_SHORT).show();
        }
    }

}

এক্সএমএল

 <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/phoneNumber"
        android:layout_marginTop="67dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Call"
        android:id="@+id/makePhoneCall"
        android:onClick="makePhoneCall"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

আপনি যা বলছেন তা এমনকি আপনি করেন না। READ_PHONE_STATE - আপনি এটি আপনার উদাহরণ কোডটিতে ব্যবহার করেন না, কেন আপনি এটি যুক্ত করেছিলেন? অবশ্যই আপনি বাতিলকরণের বোতাম টিপলে এটি আপনাকে আপনার অ্যাপের ক্রিয়াকলাপে ফিরিয়ে আনবে, তবে কল লেখার পরে কীভাবে ক্রিয়াকলাপে ফিরে আসবেন সে সম্পর্কে প্রশ্নটির লেখক
ইউজার 924

6
@Override
public void onClick(View view) {
    Intent phoneIntent = new Intent(Intent.ACTION_CALL);
    phoneIntent.setData(Uri.parse("tel:91-000-000-0000"));
    if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    startActivity(phoneIntent);
}

5

আপনি যদি কোনও শ্রোতা ব্যবহার করতে যাচ্ছেন তবে আপনাকে এই অনুমতিটি ম্যানিফেস্টেও যুক্ত করতে হবে।

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

3

কলটি দেখার পরে ফোনস্ট্যাটলাইস্টারের অভ্যন্তরে আরও ভাল ব্যবহার শেষ হয়েছে:

Intent intent = new Intent(CallDispatcherActivity.this, CallDispatcherActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

কলডিসপ্যাচারএটিভিটি হ'ল ক্রিয়াকলাপ যেখানে ব্যবহারকারী কোনও কল চালু করেছেন (আমার ক্ষেত্রে একটি ট্যাক্সি পরিষেবা প্রেরণকারীর কাছে)। এটি কেবল শীর্ষ থেকে অ্যান্ড্রয়েড টেলিফোনি অ্যাপ্লিকেশনটিকে সরিয়ে দেয়, আমি এখানে দেখেছি কুৎসিত কোডের পরিবর্তে ব্যবহারকারী ফিরে পায়।


1
এবং ফোন কলটি শেষ হওয়ার পরে শ্রোতাদের অপসারণ করতে ভুলবেন না, যেমন:((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE);
দিমিত্রি নোভিকভ

আমি আপনার পদ্ধতির ব্যবহার করার চেষ্টা করেছি কিন্তু ক্রিয়াকলাপটি (কন্ট্রোলপ্যানেল নামে পরিচিত) পুনরায় সক্রিয় করা হচ্ছে না। ডিসপ্লেটি ফোনের ডায়ালার ইন্টারফেসটি দেখিয়ে চলেছে এবং কন্ট্রোলপ্যানেলের অন-রিসুম এবং অননিউন্টেন্ট এন্ট্রি পয়েন্টগুলিতে লগারগুলি সম্পূর্ণ নীরব। এখানে অভিপ্রায় আছে: Intent intentRestart = new Intent(ControlPanel.this, ControlPanel.class);। আমার উল্লেখ করা উচিত যে ফোনস্ট্যাটলিস্টনারটিও কন্ট্রোলপ্যানেলের মধ্যে রয়েছে। অর্থাৎ, আমার লক্ষ্যটি ফোন কল শুরু করার আগে যে রাজ্যে ইউআই ছিল তা পুনরুদ্ধার করা। কোনও পরামর্শ?
পিটএইচ

আপনার ফোনস্ট্যাটলিস্টনার প্রয়োগের ভিতরে লগ ইন করার চেষ্টা করুন।
দিমিত্রি নভিকভ

3

আপনার কাছে ফিরে আসতে আপনার Activityশুনতে হবে TelephonyStates। তারপরে ফোনটি নিষ্ক্রিয় হয়ে যাওয়ার পরে আপনি আবার খোলার জন্য listenerএকটি পাঠাতে পারেন ।IntentActivity

আমি কীভাবে এটি করব তা কমপক্ষে ts


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

 **Add permission :**

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

2

ব্যবহার করার চেষ্টা করুন:

finish();

ক্রিয়াকলাপ শেষে। এটি আপনাকে আপনার আগের ক্রিয়াকলাপে পুনর্নির্দেশ করবে।


2

কখন PhoneStateListenerব্যবহৃত হয়, একটি নিশ্চিত হওয়া দরকার যে PHONE_STATE_IDLEনিম্নলিখিতটির PHONE_STATE_OFFHOOKপরে কলটি করার পরে অ্যাকশনটি ট্রিগার করতে ব্যবহৃত হয়। যদি ট্রিগারটি দেখার পরে ঘটে থাকে PHONE_STATE_IDLE, আপনি কল করার আগে এটি শেষ করবেন। কারণ আপনি রাষ্ট্রের পরিবর্তন দেখতে পাবেনPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.


চলমান কল স্ক্রিন খুললে অ্যাপটি থামানো কি সম্ভব নয়?
লিজোভ্যাকারো

শ্রোতা অবজেক্ট একবার ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(new PhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE)((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE)
টেলিফনি ম্যানেজারটি

2

// সেটোনক্লিক্লিস্টার এই কোডটি রাখুন:

EditText et_number=(EditText)findViewById(R.id.id_of_edittext); 
String my_number = et_number.getText().toString().trim();
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(my_number)); 
startActivity(callIntent);

// ম্যানিফেস্টে কল করার অনুমতি দিন:

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

1

@ দিমিত্রি নোভিকভ নতুনটির FLAG_ACTIVITY_CLEAR_TOPউপরে যে কোনও সক্রিয় উদাহরণ সাফ করেছেন। সুতরাং, প্রক্রিয়াটি সম্পূর্ণ হওয়ার আগে এটি পুরানো দৃষ্টান্তটি শেষ করতে পারে।



1

পদক্ষেপ:

1) Manifest.xmlফাইলটিতে প্রয়োজনীয় অনুমতি যুক্ত করুন।

<!--For using the phone calls -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!--For reading phone call state-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2) ফোনের অবস্থা পরিবর্তনের জন্য একটি শ্রোতা তৈরি করুন।

public class EndCallListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
    if(TelephonyManager.CALL_STATE_RINGING == state) {
    }
    if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
        //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call.
    }
    if(TelephonyManager.CALL_STATE_IDLE == state) {
        //when this state occurs, and your flag is set, restart your app
    Intent i = context.getPackageManager().getLaunchIntentForPackage(
                            context.getPackageName());
    //For resuming the application from the previous state
    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    //Uncomment the following if you want to restart the application instead of bring to front.
    //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(i);
    }
}
}

3) আপনার শ্রোতা আরম্ভ OnCreate

EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);

তবে আপনি যদি সর্বশেষ অবস্থায় আপনার অ্যাপ্লিকেশনটি পুনরায় শুরু করতে চান বা পিছনের স্ট্যাক থেকে এটি ফিরিয়ে আনতে চান তবে এর FLAG_ACTIVITY_CLEAR_TOPসাথে প্রতিস্থাপন করুনFLAG_ACTIVITY_SINGLE_TOP

এই উত্তর রেফারেন্স



0

আপনার কলটি শুরু করার সময়, এটি দুর্দান্ত দেখাচ্ছে।

যদিও আপনার অ্যাপ্লিকেশনটিকে সামনে আনার ক্ষেত্রে অ্যান্ড্রয়েড 11+ এবং নীচের মধ্যে পার্থক্য রয়েছে।

অ্যান্ড্রয়েড 10 বা তারও কম আপনার একটি নতুন উদ্দেশ্য শুরু করতে হবে, অ্যান্ড্রয়েড 11+ আপনি কেবল ব্যবহার করেন BringTaskToFront

কল স্টেট আইডিএল এ:

if (Build.VERSION.SDK_INT >= 11) {
    ActivityManager am = (ActivityManager) activity.getSystemService(Activity.ACTIVITY_SERVICE);
    am.moveTaskToFront(MyActivity.MyActivityTaskId, ActivityManager.MOVE_TASK_WITH_HOME);
} else {
    Intent intent = new Intent(activity, MyActivity.class);
    activity.startActivity(intent);
}

MyActivity.MyActivityTaskIdআমার ক্রিয়াকলাপে কল করার সময় আমি সেট করেছিলাম , এটি কাজ করে না, আপনি যে পৃষ্ঠায় ফিরে যেতে চান তার পিতামাতার ক্রিয়াকলাপ পৃষ্ঠায় এই পরিবর্তনশীলটি সেট করে।

MyActivity.MyActivityTaskId = this.getTaskId();

MyActivityTaskId আমার ক্রিয়াকলাপের ক্লাসে স্থির পরিবর্তনশীল

public static int MyActivityTaskId = 0;

আমি আশা করি এটি আপনার পক্ষে কাজ করবে। আমি উপরের কোডটি কিছুটা ভিন্নভাবে ব্যবহার করি, কলটি উত্তর দেওয়ার সাথে সাথে আমি আমার অ্যাপটি খুলি যাতে ব্যবহারকারী কলারের বিশদটি দেখতে পান।

আমি AndroidManifest.xmlপাশাপাশি কিছু জিনিস সেট করা আছে :

/*Dont really know if this makes a difference*/
<activity android:name="MyActivity" android:taskAffinity="" android:launchMode="singleTask" />

এবং অনুমতি:

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

আপনি আটকে থাকলে বা দয়া করে প্রশ্ন জিজ্ঞাসা করুন।

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