1

我为应该响应来电的android 4.1(16 API)编写了应用程序,但它没有发生。我看到了很多教程,而且太简单了,不会犯任何错误,但是……我使用的是 Android Studio 1.4。带有 apk 的电话是带有 android 6.0.1 的 Nexus 6。知道我做错了什么吗?

这是一个广播接收器类:

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" />

和主要活动:

public class MainActivity extends AppCompatActivity {

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

2 回答 2

1

在 MarshMallow Dangerous Permissions 必须在运行时给予详细了解,请访问链接https://developer.android.com/training/permissions/requesting.html

于 2016-07-27T07:49:38.930 回答
1

您需要将其更改为android:exported="false"true以便将您的接收器导出到除您之外的其他应用程序。
如果您在 Marshmallow 中遇到 SecurityException,请查看本指南

于 2016-07-27T07:36:09.270 回答