У меня есть уже созданное приложение, и я хочу добавить опцию, которая должна быть запущена, когда вызов заканчивается. Как я могу достигнуть этого? Я думал что, объявляя в моей декларации что-то вроде этого
<activity android:name="Filter">
<intent-filter>
<category android:name="android.intent.SOMETHING" />
</intent-filter>
</activity>
мог быть достаточно, но какой Intent
Я должен поставить фильтр?
Взгляд в документации, я нашел только намерения, который обнаруживает, когда вызов запускается.
То, что я ищу возможный?
Вы можете использовать PhoneStateLisenter , чтобы отслеживать изменения в состоянии вызова.
Таким образом, вы слушаете LISTEN_CALL_STATE изменение.
С помощью метода onCallStateChanged .
Итак, когда состояние изменится с OFFHOOK на IDLE, запустите ваше приложение
Я сделал это с помощью широковещательного приемника. Работает! код выглядит так -
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gopi"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".IncomingCallTracker">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
</manifest>
Фрагмент кода IncomingCallTracker выглядит так -
public class IncomingCallTracker extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Set<String> keys = bundle.keySet();
for (String key : keys) {
Log.i("MYAPP##", key + "="+ bundle.getString(key));
}
}
}
Вы можете найти ключ «состояние» в пакете. Если его значение - «IDLE», это означает, что вызов завершен, и вы можете выполнить любое действие, которое захотите, исходя из этого.