问题
I am trying to create a simple dial pad. I created all that and now I like to receive action dial intent from other applications.
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:xxxxxx="XXXXXX" />
</intent-filter>
and now I don't know what should be filled with the data in action filter. Can anyone help me ? Thanks in advance.
回答1:
This is the intent filter should be used.
<intent-filter>
<action android:name="android.intent.action.CALL_DIAL" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
And we can read the phone number from onCreate
methord like this.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//start reading here
Intent intent = getIntent();
if(intent.getData()!=null){
Log.d("intent received",intent.getData().toString());
String phoneNumber = intent.getData().toString(); //contains tel:phone_no
phoneNumber = phoneNumber.substring(4);
Log.d("intent received","Received phone number : "+phoneNumber);
/// do what you like here
}else{
Log.d("intent received","null intent received");
}
}
回答2:
The accepted answer is not working for me. After some search, I found this example from https://github.com/jdunck/Examples/blob/master/SimpleDialer/AndroidManifest.xml
<activity android:name=".DialerActivity" android:label="@string/title_dialer">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CALL_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="vnd.android.cursor.dir/calls" />
</intent-filter>
<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>
This worked fine for me.
回答3:
<intent-filter>
<action android:name="android.intent.action.CALL" />
<data android:scheme="tel" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.CALL_PRIVILEGED" />
</intent-filter>
in java
Uri number = Uri.parse("tel:" + edit_text_number);
Intent i = new Intent(Intent.ACTION_DIAL, number);
startActivity(i);
回答4:
You have to add these intent filter -
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
Also the most important thing, to add permission -
<uses-permission android:name="android.permission.CALL_PHONE" />
Cheers :)
来源:https://stackoverflow.com/questions/27688063/how-to-set-intent-filter-for-dial-action-in-android