Вопрос по android – как вызвать активность при получении входящего звонка.
Привет всем, что я хочу, чтобы вызывать свою собственную активность поверх активности входящего вызова по умолчанию. Я сделал это с использованием широковещательных приемников. Я вызываю свою активность при получении входящего вызова. но он работает нормально впервые со второго раза, когда я получаю входящий вызов, тогда активность по умолчанию входящего вызова приходит поверх моей активности. я не знаю в чем проблема, может кто-нибудь помочь мне ..
Manifest:
<code><?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> </code>
Java-код:
<code>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; } } } </code>
Я создал поток для вызова своей активности, и перед этим запустил операцию, которая спит в течение 500 мс. это мои решения ... если кто-то не находится под statd-ом, спросите меня, я напишу здесь код.
Хорошо решил эту проблему .. спасибо, что поддержал меня ..
2
ответа
и перед этим запустил операцию, которая спит в течение 500 мс. это мои решения ... если кто-то не находится под statd, спросите меня, я опубликую код здесь.
можешь ли ты опубликовать свой ответ?
Можете ли вы опубликовать свой полный код, пожалуйста?
Я только что сделал некоторые изменения в классе TestReceiver
Пожалуйста, найдите ответ ниже, если он вам полезен, затем выберите ответ.
просто замените приведенный ниже код
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();
}
}
}
Есть ли шанс, что эта тема будет прояснена? Публичного ответа недостаточно, публичный четкий ответ - это путь ..;)
@ pandu привет, спасибо за вышеупомянутую треску, но это не работает, все еще получая входящий звонок.
Приведенный выше ответ очень ясен ... если вы хотите, я опубликую полный код ... Я очень занят своим проектом, поэтому я опаздываю. если кто-то хочет полный исходный код, пожалуйста, спросите, я вышлю вам ..
@ pandu, пожалуйста, у вас есть решение, пожалуйста, помогите мне.
Привет, Панду, я хочу того же. Когда есть входящий звонок, я хочу показать активность. Я попробовал ваш код, но не смог открыть свою деятельность. Можете ли вы поделиться полным кодом?
Похожие вопросы
Я создал поток для вызова своей активности, и перед этим запустил операцию, которая спит в течение 500 мс. это мои решения ... если кто-то не находится под statd-ом, спросите меня, я напишу здесь код.
Хорошо решил эту проблему .. спасибо, что поддержал меня ..