android – 如何在接到来电时调用活动.
作者:互联网
大家好我想在默认的来电活动上调用我自己的活动..我已经使用广播接收器完成此操作我在接听来电时调用我的活动.但是,当我接到来电时,它第一次正常工作,然后默认来电活动即将到来.我不知道有什么问题可以帮助我..
表现:
<?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-input-method,android,android-intent,android-service 来源: https://codeday.me/bug/20190902/1789803.html