2016-07-27 19 views
1

Я написал приложения для android 4.1 (16 API), которые должны отвечать на входящий вызов, но этого не происходит. Я вижу много учебников, и это слишком просто, чтобы сделать какую-либо ошибку, но ... Я использую Android studio 1.4. Телефон с apk - Nexus 6 с android 6.0.1. Любая идея, что я делаю неправильно?ANDROID BroadcastReceiver не срабатывает

Это класс BroadcastReceiver:

public class MyReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Log.w("MY_DEBUG_TAG", "onReceive"); 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     String state = extras.getString(TelephonyManager.EXTRA_STATE); 
     Log.w("MY_DEBUG_TAG", state); 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      String phoneNumber = extras 
        .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Log.w("MY_DEBUG_TAG", phoneNumber); 
     } 
    } 

} 
} 

И это мой манифест:

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

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

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name="MyReceiver" 
     android:enabled="true" 
     android:exported="false" 
     > 
     <intent-filter> 
      <action 
       android:name="android.intent.action.PHONE_STATE" > 
      </action> 
     </intent-filter> 
    </receiver> 
</application> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

И mainActivity:

public class MainActivity extends AppCompatActivity { 

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

Эти намерения не могут быть использованы непосредственно в М. Посмотрите на «Права доступа к времени выполнения». – Shaishav

ответ

1

Вы должны изменить android:exported="false" - true, поэтому ваш получатель будет экспортироваться в другие приложения, кроме вас.
Если вы получаете SecurityException в Marshmallow, посмотрите this guide.

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