" />

Пропущенные данные в статистике

android

673 просмотра

3 ответа

373 Репутация автора

Я посылаю намерение от «активности» получателю в «службу» (и передаю данные). Мой код имеет активность и сервис (у которого есть приемник). Получатель объявляется следующим образом

 <receiver android:name="xxx"
        android:enabled="true"  >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
           <!-- protected intents meant for os and not for us <action android:name="android.intent.action.ACTION_NEW_OUTGOING_CALL" android:priority="0" /> -->
        </intent-filter>

  </receiver>

Деятельность определяется следующим образом

   <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Я рассмотрел Использовать намерение отправить данные в мою деятельность

Намерение, которое я вызываю, является намерением вызова и передачей номера вызова назначения со следующим кодом

    Log.e(TAG,"Calling "+number);
    Intent callIntent = new Intent(Intent.ACTION_CALL); //ACTION_NEW_OUTGOING_CALL is deprecated in API 21, hence ACTION_CALL          
    callIntent.putExtra("PHONE_NUMBER",number);
    number = "tel:"+number;
    callIntent.setData(Uri.parse(number));
    startActivity(callIntent);

Выше код успешно звонит из моего приложения. У меня также есть приемник для перехвата вызовов, а приемник прекрасно перехватывает вышеуказанный вызов. Тем не менее, «дополнения» вышеуказанного намерения отсутствуют в приемнике; Я всегда получаю "PHONE_NUMBER" как ноль в следующем коде

@Override
public void onReceive(Context context, Intent intent) {
      //blah blah..
 savedNumber = intent.getExtras().getString("PHONE_NUMBER");
 if(savedNumber == null)
        savedNumber = intent.getStringExtra("PHONE_NUMBER");
 Log.e(TAG, " savedNumber = "+savedNumber);
}

В чем моя ошибка и почему я получаю намерение в приемнике, но «лишних» не хватает (как вы могли заметить, я пытался получить его обоими способами из намерения)

Автор: mobileDev Источник Размещён: 19.07.2016 02:28

Ответы (3)


2 плюса

2932 Репутация автора

Попробуй это:

Intent intent = context.getIntent();
savedNumber = intent.getStringExtra("PHONE_NUMBER");
Автор: statosdotcom Размещён: 19.07.2016 02:42

0 плюса

485 Репутация автора

Запустите сервис, как это-

Intent callIntent=new Intent(this, Service.class); 
callIntent.putExtra("phonenumber",number);
this.startService(callIntent); 

Затем получить данные из службы;

data=(String) intent.getExtras().get("phonenumber"); 

Вы можете получить доступ к своему параметру либо из параметра Intent onHandleIntent, либо из OnStartCommand.

обслуживание

protected void onStartCommand (Intent intent, int flags, int startId) {
data=(String) intent.getExtras().get("data"); 
}

IntentService

protected void onHandleIntent(Intent intent) {
data=(String) intent.getExtras().get("data"); 
}

Это зависит от того, какой тип сервиса вы используете.

Автор: Singh Размещён: 19.07.2016 03:21

0 плюса

2931 Репутация автора

Решение

getIntent () - это метод класса Activity. Вы можете видеть, что в методе onReceive () есть аргумент намерения, из которого вы получаете строку.

String number = null;
number = intent.getStringExtra("PHONE_NUMBER");

Но я читал в этой статье: Как передать Extra в BroadcastReceiver, при запуске ACTION_CALL Только сама система Android может транслировать намерение NEW_OUTGOING_CALL. Вы не можете добавить свои собственные дополнения к этому намерению. Вам нужно будет придумать другой способ сделать то, что вы пытаетесь достичь.

Автор: Justin Размещён: 19.07.2016 03:22
Вопросы из категории :
32x32