2016-08-11 2 views
0

Ich versuche Toast nach dem Empfang eines Anrufs anzuzeigen, habe ich alle notwendigen Dinge implementiert, um Broadcast-Empfänger zu registrieren, aber es zeigt Toast nicht an. Ich versuche, dieses Programm auf Eibisch GerätAndroid Broadcast-Empfänger für Anruf funktioniert nicht? (Marshmallow)

MyCallReceiver.java zu laufen -

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> 

Ich habe eine MainActivity mit einem Standard-Label Hello World sagen.

+0

Werfen Sie einen Blick hier: http://www.tutorialforandroid.com/2009/01/get-phone-state-when-someone-is-calling_22.html – Shaishav

+0

Sie den Paketnamen überprüfen Hat . Der Name Ihres App-Pakets lautet com.example.suhas.msgmanager und Sie haben den Empfänger im com.suhas.callreceiver-Paket definiert. – Sandeep

+0

Ich bin auf einem Marshmallow-Gerät aktiv, also wie kann ich die Laufzeitberechtigung in Marshmallow angeben. Ursache Marshmallow erfordert Laufzeitberechtigung –

Antwort

0

Sie haben im Empfänger einen falschen Paketnamen angegeben.

Sie sollten Empfänger definieren, wie unten:

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

Ich habe gerade Ihren Code mit richtigen Paketnamen getestet und es funktioniert gut. – Sandeep

+0

Ich bin auf Marshmallow-Gerät ausgeführt, also wie kann ich Laufzeit Berechtigung in Marshmallow angeben. Ursache Marshmallow erfordert Laufzeit Berechtigung –

+0

Überprüfen Sie den Link für Laufzeit-Erlaubnis https://developer.android.com/training/permissions/request.html.html – Sandeep

7

In Case of Eibisch Version: Wir haben ein Konzept Runtime Erlaubnis genannt, die im Inneren Aktivität, um durchgeführt werden soll mit der Erlaubnis zu arbeiten. Runtime-Berechtigung bietet eine Möglichkeit, Benutzer während der Ausführung von Aktivität zum ersten Mal um bestimmte Berechtigung zu fragen.

Das sind zwei Dinge, die Sie angeben müssen:

// angeben jede konstante Zahl für die Erlaubnis

public final static int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 11; 

// Geben Sie folgenden Code in OnCreate Methode

@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); 
     } 
    } 
} 

// Geben Sie diese Methode an, die ein Popup-Fenster öffnet, in dem der Benutzer zur Laufzeit aufgefordert wird,

@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; 
     } 
    } 
} 

liefert dies eine Möglichkeit, mit Eibisch Geräten zu arbeiten

+0

Danke, hat mit mir perfekt funktioniert. –

+0

das funktionierte für mich –

+0

Nach mindestens 3 Stunden Suche fand ich endlich die richtige Antwort. – Matthew556

0

In Ziel API 23 oder höher gemäß dem Eibisch muss die Anwendungen Zeit Erlaubnis oder manuell in Ihrer Geräteeinstellung >> Anwendungen laufen >> wählen Sie Ihre App >>

Erlaubnis

this link can help you

Verwandte Themen