通过拨号盘启动应用程序

时间:2013-11-13 06:39:27

标签: android android-intent android-activity broadcastreceiver

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

public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
           Bundle bundle = intent.getExtras();
            if (null == bundle)
                return;

            String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
                //here change the number to your desired number
                String compare_num="5556";
                if(phoneNumber.equals(compare_num))
                {
                    setResultData(null);
                //  Guardian.changeStealthMode(context,PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
                    //Intent to move to next Activity
                    Intent myintent=new Intent(context,MainActivity.class);
                    myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(myintent);
                   // abortBroadcast();

以及包含主要活动的启动应用

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

         //Intent call here
        Intent intent=getIntent();
        String message = intent.getStringExtra(MainActivity.TELEPHONY_SERVICE);
         //text here
        EditText et = (EditText) findViewById(R.id.editText1);

     //Button here
        Button Login = (Button) findViewById(R.id.button1);
    }

当我启动此代码时,我的应用程序不会通过拨号盘启动。 请帮帮我.........

2 个答案:

答案 0 :(得分:1)

Android类 -

public class SecretCodeReceiver extends BroadcastReceiver {


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

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

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



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

}

}

Android清单 -

<receiver android:name=".SecretCodeReceiver"   android:enabled="true"
        >
        <intent-filter>


     <action android:name="android.provider.Telephony.SECRET_CODE" />
      <data android:scheme="android_secret_code" android:host="111" />


        </intent-filter>
    </receiver>

当用户拨打

  

*#*#111#*#*

然后将触发所需的事件。如果您需要在拨打号码时触发事件,则需要执行“Shyam”回答中提到的ACTION_NEW_OUTGOING_CALL

答案 1 :(得分:0)

试试这个

public class Example extends BroadcastReceiver 
    {

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

          if (intent.getAction().equals(android.intent.action.NEW_OUTGOING_CALL)) {
           String phoneNumber = intent.getExtras().getString( android.intent.extra.PHONE_NUMBER );

             if(phoneNumber.equals("#1234#")) { 
                Intent intent1 = new Intent(context , YourActivity.class);
                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
                context.startActivity(intent1);
           }

          }

        }

    } 
in your manifest file 


<receiver
        android:name=".receiver.DialReceiver"
        android:exported="true"
        android:process=":background"
        tools:ignore="ExportedReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>