запускать скрытое приложение при наборе секретного кода

мое требование - запускать скрытое приложение при вводе секретного кода.

MainActivity.java

public class MainActivity extends
        BroadcastReceiver {

    String dialed_number;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        dialed_number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

        if(dialed_number.equals("*0*1235#"))
        {
            Intent appIntent = new Intent(context, MainActivity.class);
            appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(appIntent);
            setResultData(null);
        }
    }

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tuto.bala.helloworld" >
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <receiver
            android:name=".MainActivity">
        </receiver>
    </application>

</manifest>

Когда я запускаю проект, я получаю следующее исключение: проблема с подключением, неверный код mmi android

Кто-нибудь может помочь

С уважением, Бала


person user38843    schedule 28.01.2015    source источник


Ответы (2)


Я использовал тот же код, который работает, когда нам дают номер набора, который не должен включать *, #. и в файле манифеста мы должны объявить получателя следующим образом

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

и разрешение на запись как <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

Просто посмотрите на отредактированный ниже код:

Используйте 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>

Также включите разрешение:

Теперь, если вы игнорируете проверку номера в приемнике, вы получите набранный номер внутри вашей MainActivity,

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

Если вы хотите запустить приложение как вызов магического номера, это довольно просто использовать BroadcastReceivers для исходящего вызова, вы можете получить решение из приложения Right Number.

person Hanuman    schedule 28.01.2015
comment
Уважаемый Хануман, Код не работал и для обычных номеров. Я попытался набрать номер 1435. Не могли бы вы помочь, так как это очень срочно. Спасибо - person user38843; 28.01.2015
comment
Посмотрите это, вы получите полное разъяснение /вопросы/27596700/ - person Hanuman; 28.01.2015
comment
предоставленная страница удалена из stackoverflow, можете ли вы указать другой URL-адрес или какой-либо учебник для нее. Большое спасибо Хануман - person user38843; 29.01.2015
comment
Большое спасибо, Хануман, ваше решение сработало как шарм. Я ценю вашу помощь. - person user38843; 29.01.2015
comment
Я протестировал приложение в эмуляторе, оно работало нормально, однако приложение не работает на устройстве. Набор номера вызывает вызов. В чем может быть проблема? - person user38843; 29.01.2015
comment
Он будет работать, он показывает какую-либо ошибку? Какое устройство вы используете? - person Hanuman; 29.01.2015

исключение: проблема с подключением, неверный код mmi android

Чтобы обнаружить событие исходящего телефонного звонка, вы должны зарегистрировать трансляцию с помощью NEW_OUTGOING_CALL Action в AndroidManifest.xml :

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

а также добавить PROCESS_OUTGOING_CALLS разрешение:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
person ρяσѕρєя K    schedule 28.01.2015
comment
исключение: проблема с подключением, неверный код mmi android. Помогите, пожалуйста, в решении этого исключения. Я борюсь уже почти неделю, и это очень срочно - person user38843; 28.01.2015
comment
@ user38843: попробуйте передать тот же действительный номер, что и 1234563, а затем проверьте, возникает ли та же проблема? - person ρяσѕρєя K; 28.01.2015
comment
Спасибо за ваш ответ. При наборе номера раздается звонок :( - person user38843; 28.01.2015