【问题标题】:Launch application using dial pad in android在android中使用拨号盘启动应用程序
【发布时间】:2013-11-13 09:56:07
【问题描述】:

我想通过拨号盘启动我的应用程序。我正在使用以下代码。用于拨号盘启动应用程序(在广播接收器中)

public class HiddenReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
try{

               // Toast.makeText(context,"Number Dialed",1).show();

                Intent serviceIntent = new Intent(context,MainActivity.class);
                    serviceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(serviceIntent);



                }
                catch(Exception e)
                {
                    Log.d(TAG, ""+e.getMessage());
                }

通过拨号盘按键时,我想启动我使用以下内容的主要活动

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hidden_receiver); 

         //Intent call here
        Intent intent=getIntent();
        String message = intent.getStringExtra(MainActivity.TELEPHONY_SERVICE);
         //text here

但是当我按下我的代码时,它拨打的号码会消失,但拨号盘既不会消失,也不会启动 MainActivity。 这个问题怎么解决?帮帮我..... 谢谢。

【问题讨论】:

  • 当您拨打一个号码(例如 1234)时,您必须启动您的应用程序。这不是你的需要吗?
  • @Anjali 你有解决方案吗?
  • 仍然没有......没有人工作正常。如果你得到任何,必须告诉我。 @Pankaj
  • @anjali 在拨号盘上我不知道,但在拨出电话时我知道..
  • 请分享.... @Pankaj.

标签: android android-intent broadcastreceiver


【解决方案1】:

如下使用BroadcastReceiver

public class MyOutgoingCallHandler extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
     // Extract phone number reformatted by previous receivers
    String phoneNumber = getResultData();
    if (phoneNumber == null) {
      // No reformatted number, use the original
      phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    }

         if(phoneNumber.equals("1234")){ // DialedNumber checking.
        // My app will bring up, so cancel the broadcast
        setResultData(null);

        // Start my app
        Intent i=new Intent(context,MainActivity.class);
        i.putExtra("extra_phone", phoneNumber);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
         }

}

}

别忘了在你的清单中注册这个接收器

    <receiver android:name="MyOutgoingCallHandler">
        <intent-filter >
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        </intent-filter>
    </receiver>

另外,包括权限:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

现在,如果您忽略接收器中的号码,您将在 MainActivity 中获得拨打的号码,

String phone=getIntent().getStringExtra("extra_phone");
    if(!phone.equals(null)){
        Toast.makeText(getBaseContext(), phone, Toast.LENGTH_LONG).show();
    }

【讨论】:

  • 做一件事,将LogToast 放入 onReceive() 并检查其是否正常工作。
  • PROCESS_OUTGOING_CALLS 权限节省了我的时间
  • 对于新的 Android API (>=23),您必须在运行时请求 android.permission.PROCESS_OUTGOING_CALLS 权限
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多