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();
            }
        }    
    }
.

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top