Numero di telefono Tapping: voglio che la mia app sia nella selezione dell'applicazione
-
21-12-2019 - |
Domanda
È lo stesso problema di Android Dialer personalizzatosul tamponatura del numero di telefono collega .Ho fatto everthings come dichiarato lì.
Voglio che la mia app appaia nel selezionatore dell'applicazione, quando un numero di telefono viene toccato.
Ho
package com.example.editcall;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d(OutgoingCallReceiver.class.getSimpleName(), intent.toString() + ", call to: " + phoneNumber);
Toast.makeText(context, "Outgoing call catched: " + phoneNumber, Toast.LENGTH_LONG).show();
}
}
.
e in androidmanifest.xml:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<receiver
android:name=".OutgoingCallReceiver"
android:exported="true" >
<intent-filter android:priority="100" >
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tel" />
</intent-filter>
</receiver>
.
Ma non si presenta nel selezionatore dell'applicazione.Qualche idea?
Soluzione:
Come @Commonsware menzionato di seguito, deve essere un'attività.
Inoltre, android.intent.category.LAUNCHER
non funziona, deve essere android.intent.category.DEFAULT
.
E puoi dimenticare (per questo :-) su android:priority
e android:exported
.
Allora, funziona:
<activity android:name=".ui.SearchActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tel" />
</intent-filter>
</activity>
.
Con questo per ottenere il numero di telefono:
public class SearchActivity extends FragmentActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String calledNumber = null;
String inputURI = this.getIntent().getDataString();
if (inputURI != null) {
Uri uri = Uri.parse(Uri.decode(inputURI));
if (uri.getScheme().equals("tel")) {
calledNumber = uri.getSchemeSpecificPart();
}
}
}
. Soluzione
Il tuo <intent-filter>
è progettato per un <activity>
.Non avrai fortuna che lo usi con un <receiver>
.Inoltre, il selezionatore mostra solo attività.Quindi, crea un <activity>
e utilizzare il <intent-filter>
lì (forse meno il priority
).