gpt4 book ai didi

android - 接到来电时如何调用 Activity 。

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:01 25 4
gpt4 key购买 nike

大家好我想在默认来电 Activity 上调用我自己的 Activity ..我已经使用广播接收器完成了这个我在接到来电时调用我的 Activity 。但是当我接到来电时,从第二次开始,它第一次工作正常,然后默认的来电 Activity 结束了我的 Activity 。我不知道有什么问题可以帮助我..

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.satish.service"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

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

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver
android:name="MyCallReceiver"
android:enabled="true" >
<intent-filter android:priority="10">
<action android:name="android.intent.action.PHONE_STATE" >

</action>
</intent-filter>
</receiver>
<receiver
android:name="TestReceiver"
android:enabled="true" >
<intent-filter android:priority="10">
<action android:name="jason.wei.custom.intent.action.TEST" >
</action>
</intent-filter>
</receiver>

<activity
android:name="CallActivity"
android:clearTaskOnLaunch="true"
android:launchMode="singleTask" >
<intent-filter android:priority="1000"></intent-filter>
</activity>
</application>
</manifest>

Java 代码:

public class MyCallReceiver extends BroadcastReceiver{
public static final String CUSTOM_INTENT = "jason.wei.custom.intent.action.TEST";
Context context = null;
private static final String TAG = "Phone call";



public void onReceive(Context context, Intent intent) {

Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
Log.w("DEBUG", state);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

Intent i = new Intent();
i.setAction(CUSTOM_INTENT);
context.sendBroadcast(i);

}
}
}
}


public class TestReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(MyCallReceiver.CUSTOM_INTENT)) {
System.out.println("GOT THE INTENT");
context.startActivity(new Intent(context, CallActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
}

public class CallActivity extends Activity implements OnClickListener{
private ITelephony telephonyService;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

setTheme(android.R.style.Theme_Dialog);
((Button)findViewById(R.id.call)).setOnClickListener(this);
((Button)findViewById(R.id.end)).setOnClickListener(this);
TelephonyManager telephony = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

try {
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.call:

telephonyService.answerRingingCall();
break;

case R.id.end:
telephonyService.endCall();
finish();
break;

default:
break;
}
}
}

最佳答案

实际上完整的代码是我在上面发布的,只是替换下面的代码

public class TestReceiver extends BroadcastReceiver{

public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(MyCallReceiver.CUSTOM_INTENT)) {
System.out.println("GOT THE INTENT");
context.startActivity(new Intent(context, CallActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
}

使用以下代码

 public class TestReceiver extends BroadcastReceiver{

@Override
public void onReceive(final Context context, Intent intent) {
if (intent.getAction().equals(MyCallReceiver.CUSTOM_TEST_INTENT)) {
System.out.println("GOT THE INTENT");
final String mobileNumber = intent.getExtras().getString("number");
Thread thread = new Thread(){
private int sleepTime = 400;

@Override
public void run() {
super.run();
try {
int wait_Time = 0;

while (wait_Time < sleepTime ) {
sleep(100);
wait_Time += 100;
}
}catch (Exception e) {
Toast.makeText(context,
"Error Occured Because:" + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
finally {

}

context.startActivity(new Intent(context, CallActivity.class).putExtra("number", mobileNumber)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
};
thread.run();
}
}
}

关于android - 接到来电时如何调用 Activity 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10069667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com