jak zadzwonić do aktywności podczas otrzymywania połączenia przychodzącego.
Witam wszystkich chcę wywołać moją własną aktywność nad domyślną aktywnością połączeń przychodzących .. zrobiłem to z wykorzystaniem odbiorników rozgłoszeniowych. ale działa dobrze po raz pierwszy od drugiego razu, gdy otrzymuję połączenie przychodzące, a następnie domyślnie przychodzi aktywność połączenia przychodzącego na moją aktywność. Nie wiem, jaki jest problem, może ktoś mi pomóc ...
Oczywisty:
<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>
Kod 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>