2016-08-11 3 views
0

Я пытаюсь отобразить тост после получения вызова, я внедрил все необходимые вещи, необходимые для регистрации широковещательного приемника, но он не показывает тост. Я пытаюсь запустить эту программу на Зефир устройствеAndroid Broadcast приемник для вызова не работает? (Marshmallow)

MyCallReceiver.java -

package com.suhas.callreceiver; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.widget.Toast; 

public class MyCallReceiver extends BroadcastReceiver { 

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

    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
     // This code will execute when the phone has an incoming call 

     // get the phone number 
     String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     Toast.makeText(context, "Call from:" +incomingNumber, Toast.LENGTH_LONG).show(); 
     Log.d("MyTrack call", "call receive"); 

    } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
      TelephonyManager.EXTRA_STATE_IDLE)) 
    { 
     Toast.makeText(context, "Detected call hangup event", Toast.LENGTH_LONG).show(); 
    } 
    else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
      TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
     // This code will execute when the call is disconnected 

    } 
} 
} 

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.suhas.msgmanager"> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/msgis" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 


    <activity android:name="com.example.suhas.msgmanager.MyDialog" android:launchMode="singleTask" 
     android:theme="@android:style/Theme.Translucent" /> 

    <service android:name="com.example.suhas.msgmanager.ChatHeadService"></service> 

    <receiver android:name=".MyCallReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

    <activity android:name=".AddMessageActivity"> 
    </activity> 
</application> 

</manifest> 

У меня есть один MainActivity с один ярлык по умолчанию, говоря Hello World.

+0

Посмотрите здесь: http://www.tutorialforandroid.com/2009/01/get-phone-state-when-someone-is-calling_22.html – Shaishav

+0

Проверили ли вы имя пакета , Имя вашего приложения - com.example.suhas.msgmanager, и вы определили получателя в пакете com.suhas.callreceiver. – Sandeep

+0

. Я запускаюсь на устройстве marshmallow, так как я могу указать разрешение времени выполнения в marshmallow. потому что marshmallow требует разрешения во время выполнения. –

ответ

0

Вы указали неправильное имя пакета в приемнике.

Вы должны определить приемник, как показано ниже:

<receiver android:name="com.suhas.callreceiver.MyCallReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 
+0

Я просто проверил ваш код с правильным именем пакета и его работой. – Sandeep

+0

Я бегу по устройству зефира, так как я могу указать разрешение времени выполнения в зефире. причина, по которой зефир требует разрешения во время выполнения –

+0

Проверьте ссылку на разрешение на выполнение https://developer.android.com/training/permissions/requesting.html – Sandeep

7

В случае Зефир версии, у нас есть понятие называется разрешение времени выполнения, которое должно быть сделано в деятельности для того, чтобы работать с разрешения. Runtime-разрешение предоставляет возможность запрашивать у пользователя определенные разрешения во время выполнения, когда он запускает активность в первый раз.

Это две вещи, которые вы должны указать:

// указать любое постоянное число для разрешения

public final static int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 11; 

// Определяем следующий фрагмент кода в методе OnCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Here, thisActivity is the current activity 
    if (ContextCompat.checkSelfPermission(getApplicationContext(), 
      Manifest.permission.READ_PHONE_STATE) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.READ_CONTACTS)) { 
     } else { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.READ_PHONE_STATE}, 
        MY_PERMISSIONS_REQUEST_READ_PHONE_STATE); 
     } 
    } 
} 

// укажите этот метод, который будет всплывающее окно, запрашивающее у пользователя разрешение во время выполнения

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       } else { 
      } 
      return; 
     } 
    } 
} 

это обеспечит способ работы с зефиром устройствами

+0

Спасибо, отлично работал со мной. –

+0

, который работал для меня –

+0

После поиска по крайней мере 3 часов я, наконец, нашел правильный ответ. – Matthew556

0

В целевой API 23 или выше в соответствии с Зефир приложения нуждается в запуске разрешение по времени или по эксплуатации в настройках устройства >> приложения >> выберите приложение >> разрешение

this link can help you

Смежные вопросы