วิธีโทรออกใน Android และกลับมาที่กิจกรรมของฉันเมื่อโทรเสร็จแล้ว?


129

ฉันกำลังเปิดกิจกรรมเพื่อโทรออก แต่เมื่อฉันกดปุ่ม 'วางสาย' มันจะไม่กลับไปที่กิจกรรมของฉัน คุณช่วยบอกฉันได้ไหมว่าฉันจะเปิดกิจกรรมการโทรที่กลับมาหาฉันได้อย่างไรเมื่อกดปุ่ม 'วางสาย' นี่คือวิธีที่ฉันโทรออก:

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

คำตอบ:


106

ใช้ PhoneStateListener เพื่อดูว่าการโทรสิ้นสุดเมื่อใด คุณมักจะต้องทริกเกอร์การทำงานของผู้ฟังเพื่อรอให้การโทรเริ่มต้น (รอจนกว่าจะเปลี่ยนจาก PHONE_STATE_OFFHOOK เป็น PHONE_STATE_IDLE อีกครั้ง) จากนั้นเขียนโค้ดเพื่อให้แอปของคุณสำรองในสถานะ IDLE

คุณอาจต้องเรียกใช้ Listener ในบริการเพื่อให้แน่ใจว่ายังคงทำงานอยู่และแอปของคุณจะรีสตาร์ท โค้ดตัวอย่างบางส่วน:

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
อย่าลืมสิทธิ์ ;)
Gp2mv3

5
ตามที่ Gp2mv3 ได้ระบุไว้อย่าลืมเพิ่มสิทธิ์ READ_PHONE_STATE ลงใน AndroidManifest.xml
Cooper

6
@moonlightcheese ใส่โค้ดเพื่อกลับมาที่แอพของเราจากแอพโทรได้ไหม?
Geek

สิ่งนี้อันตรายเพราะจะเปิดกิจกรรมแอปของคุณทุกครั้งที่โทร
user924

49

นี่คือคำถามที่ถามโดย Starter

ปัญหาเกี่ยวกับรหัสของคุณคือคุณส่งหมายเลขไม่ถูกต้อง

รหัสควรเป็น:

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);
    }
};

อย่าลืมเพิ่มสิทธิ์ในไฟล์ manifest

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

หรือ

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

สำหรับหมายเลขฉุกเฉินในกรณีที่DIALใช้


7
ฉันมีช่วงเวลาที่ยากลำบากในการดูว่ารหัสของคุณแตกต่างจากรหัสในคำถามเดิมอย่างไร
Elijah Saounkine

รหัสไม่แตกต่างกัน คุณต้องเพิ่มสิทธิ์ในไฟล์รายการ
Pria

4
android.permission.CALL_PRIVILEGED สิทธิ์อนุญาตเฉพาะแอประบบที่ไม่มีในระดับแอป
CoDe

แล้วนั่นคืออะไร? จะไม่กลับไปที่กิจกรรมของคุณ
user924

24

เรามีปัญหาเดียวกันและสามารถแก้ไขได้โดยใช้PhoneStateListenerเพื่อระบุเมื่อการโทรสิ้นสุด แต่นอกจากนี้เราต้องfinish()ทำกิจกรรมเดิมก่อนที่จะเริ่มต้นอีกครั้งด้วยstartActivityมิฉะนั้นบันทึกการโทรจะอยู่ตรงหน้า


4
คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้วิธีอื่น หากคุณสร้าง ContentObserver ที่สังเกตบันทึกการโทรของ Android แอปจะไม่เริ่มทำงานจนกว่าจะมีการเปลี่ยนแปลงบันทึกการโทร ฉันต้องทิ้ง PhoneStateListener ในรูปแบบนี้เนื่องจากแอปของฉันต้องการข้อมูลบันทึกการโทรและผู้ฟังกลับมาก่อนที่จะมีการเปลี่ยนแปลงเหล่านั้น pastebin.com/bq2s9EVa
moonlightcheese

11
@ André: ลิงก์ของคุณดูเหมือนจะใช้ไม่ได้
aggregate1166877

ฉันจะทำให้คุณมีชื่อเสียงเป็นล้าน ๆ (ถ้าฉันมีมาก :)) ขอบคุณที่ทำให้วันของฉัน!
keybee

1
ปัญหาเกี่ยวกับลิงค์ที่ฉันพูด!
Dheeraj Bhaskar

คลังอินเทอร์เน็ตเพื่อช่วยเหลือ ... web.archive.org/web/20120123224619/http://umamao.com/questions/…
พื้นฐาน

13

ฉันพบว่า EndCallListener เป็นตัวอย่างที่ใช้งานได้ดีที่สุดเพื่อให้ได้พฤติกรรมที่อธิบายไว้ (เสร็จสิ้น () โทรเริ่มต้นใหม่) ฉันได้เพิ่ม SharedPreferences บางส่วนเพื่อให้ Listener มีข้อมูลอ้างอิงในการจัดการพฤติกรรมนี้

OnClick, initialise และ EndCallListener ของฉันตอบสนองต่อการโทรจากแอพเท่านั้น ไม่สนใจสายอื่น ๆ

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>

และสิ่งนี้ในไฟล์ Manifest ของคุณหากคุณต้องการกลับไปที่รูปลักษณ์ก่อนการโทร

  <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>

และใส่สิ่งเหล่านี้ไว้ใน 'myActivity' ของคุณ

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()

ใช้สิ่งนี้เพื่อเริ่มต้นพฤติกรรมสำหรับ onClick ของคุณใน myActivity เช่นหลังจาก 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
ขออภัยรหัสนี้ดูค่อนข้างน่าเกลียด ขอบคุณสำหรับคำตอบว่า
Pierre

7

คุณสามารถใช้ startActivityForResult ()


1
การใช้ Android 5.0 วิธี onActivityResult คือการโทรทันทีการโทรเริ่มต้นขึ้น !!
Panciz

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

นี่คือตัวอย่างของฉันขั้นแรกผู้ใช้จะต้องเขียนหมายเลขที่ต้องการโทรออกจากนั้นกดปุ่มโทรและนำไปที่โทรศัพท์ หลังจากยกเลิกการโทรผู้ใช้จะถูกส่งกลับไปที่แอปพลิเคชัน ในการนี้ปุ่มจะต้องมีเมธอด onClick ('makePhoneCall' ในตัวอย่างนี้) ใน xml คุณต้องลงทะเบียนการอนุญาตในรายการ

ประจักษ์

<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();
        }
    }

}

XML

 <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 - คุณไม่ได้ใช้ในโค้ดตัวอย่างทำไมคุณเพิ่มเข้าไป แน่นอนว่ามันจะนำคุณกลับไปที่กิจกรรมแอพของคุณหากคุณกดปุ่มยกเลิก แต่ผู้เขียนคำถามถามเกี่ยวกับวิธีกลับไปที่กิจกรรมหลังจากที่รับสาย
user924

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

หากคุณจะใช้ Listener คุณจะต้องเพิ่มสิทธิ์นี้ในไฟล์ Manifest ด้วย

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

3

ภายใน PhoneStateListener หลังจากเห็นการโทรเสร็จแล้วให้ใช้งานได้ดีขึ้น:

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

โดยที่ CallDispatcherActivity คือกิจกรรมที่ผู้ใช้โทรออก (ไปยังผู้ให้บริการแท็กซี่ในกรณีของฉัน) นี่เป็นเพียงการลบแอพโทรศัพท์ Android ออกจากด้านบนผู้ใช้จะกลับมาแทนที่จะเป็นรหัสที่น่าเกลียดที่ฉันเห็นที่นี่


1
และอย่าลืมลบผู้ฟังออกหลังจากโทรศัพท์เสร็จแล้วเช่น((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE);
Dmitri Novikov

ฉันได้ลองใช้แนวทางของคุณแล้ว แต่กิจกรรม (เรียกว่า ControlPanel) ไม่ได้เปิดใช้งานอีกครั้ง จอแสดงผลยังคงแสดงอินเทอร์เฟซของแป้นหมุนโทรศัพท์และตัวบันทึกบนจุดเข้า onResume และ onNewIntent ภายใน ControlPanel จะเงียบสนิท นี่คือเจตนา: Intent intentRestart = new Intent(ControlPanel.this, ControlPanel.class);. ฉันควรชี้ให้เห็นว่า PhoneStateListener อยู่ใน ControlPanel ด้วย กล่าวคือเป้าหมายของฉันคือการกู้คืน UI กลับสู่สถานะเดิมก่อนที่จะเริ่มการโทร ข้อเสนอแนะใด ๆ ?
PeteH

ลองเข้าสู่ระบบภายในการใช้งาน PhoneStateListener ของคุณ
Dmitri Novikov

3

ในการกลับไปของคุณคุณจะต้องฟังActivity TelephonyStatesซึ่งlistenerคุณสามารถส่งIntentเพื่อเปิดใหม่Activityเมื่อโทรศัพท์ไม่ได้ใช้งาน

อย่างน้อยนั่นคือวิธีที่ฉันจะทำ


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ใช้a เพื่อกระตุ้นการดำเนินการที่จะทำหลังจากการโทร หากทริกเกอร์เกิดขึ้นเมื่อเห็นPHONE_STATE_IDLEคุณจะจบลงก่อนการโทร เพราะคุณจะเห็นการเปลี่ยนแปลงของรัฐPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.


เป็นไปไม่ได้ที่แอปจะหยุดเมื่อหน้าจอการโทรที่กำลังดำเนินอยู่เปิดขึ้น
lisovaccaro

วัตถุ Listener เมื่อตั้งค่าให้ฟัง TelephonyManager ด้วย ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(new PhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE)จะยังคงฟังสถานะโทรศัพท์และใช้งานได้จนกว่าจะหยุดอย่างชัดเจนด้วย((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE)
PonMaran

2

// ใน setonclicklistener ใส่รหัสนี้:

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

@Dmitri Novikov 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

เมื่อเริ่มโทรก็ดูดี

มีความแตกต่างระหว่าง Android 11+ และลงในการนำแอปของคุณไปอยู่ข้างหน้า

Android 10 หรือน้อยกว่าคุณต้องเริ่มจุดประสงค์ใหม่ Android 11+ ที่คุณใช้ BringTaskToFront

ในสถานะการโทร IDLE:

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.