GVKun编程网logo

权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE(权限拒绝是什么意思)

14

如果您想了解权限拒绝:startForeground需要android.permission.FOREGROUND_SERVICE的相关知识,那么本文是一篇不可错过的文章,我们将对权限拒绝是什么意思进

如果您想了解权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE的相关知识,那么本文是一篇不可错过的文章,我们将对权限拒绝是什么意思进行全面详尽的解释,并且为您提供关于Android Studio真机测试——Error running app: No target device found、android – Context.startForegroundService()然后没有调用Service.startForeground、android – enableReaderMode和enableForegroundDispatch有什么区别?、android – ParseFacebookUtils [V4-1.9.1] logInWithReadPermissionsInBackground无效日期的有价值的信息。

本文目录一览:

权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE(权限拒绝是什么意思)

权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE(权限拒绝是什么意思)

最近我们突然看到以下一些堆栈跟踪。为什么会这样?这是从应用程序尝试通过媒体通知和所有内容将音频评论服务移动到前台时开始的。

java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE    at android.os.Parcel.createException(Parcel.java:1942)    at android.os.Parcel.readException(Parcel.java:1910)    at android.os.Parcel.readException(Parcel.java:1860)    at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198)    at android.app.Service.startForeground(Service.java:695)    at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372)    at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328)    at com.example.app.services.AudioService.onStartCommand(AudioService.java:228)    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667)    at android.app.ActivityThread.access$1600(ActivityThread.java:199)    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)    at android.os.Handler.dispatchMessage(Handler.java:106)    at android.os.Looper.loop(Looper.java:193)    at android.app.ActivityThread.main(ActivityThread.java:6669)    at java.lang.reflect.Method.invoke(Native Method)    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: android.os.RemoteException: Remote stack trace:    at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:9186)    at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1189)    at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:870)    at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:20434)    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:976)

答案1

小编典典

如果您已设置targetSdkVersion = 28(Android 9 /
Pie)或更高版本并且尚未声明使用FOREGROUND_SERVICE权限,则会发生这种情况。

来自Android
9的迁移说明:

想要使用前台服务的应用现在必须首先请求 FOREGROUND_SERVICE
权限。这是一个正常的权限,因此系统会自动将其授予请求的应用程序。未经许可启动前台服务会引发 SecurityException。

解决方案是在中添加以下内容AndroidManifest.xml

<manifest ...>     ...     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />     ...     <application ...>     ...</manifest>

Android Studio真机测试——Error running app: No target device found

Android Studio真机测试——Error running app: No target device found

真机测试时总是爆:Error running app: No target device found

总共有这几点原因,依次排查

1.驱动有没有安装(手机助手可以解决)

同时查看as的Google USB Driver是否安装没安装点击在线安装

2.usb线是否松懈 (拔插一下)

3.USB调试模式有没有打开 (开发者模式)

设置——>开发者选项(点击打开)——>USB调试(点击打开)。调试过程中主要手机提示信息选择
4.adb挂了(打开cmd 输入 :
1)adb kill-server
2)adb start-server 

),输入后提示: adb错误“''adb'' 不是内部或外部命令,也不是可运行的程序或批处理文件。这个问题一般有两种可能:
  1.就是没有配置环境变量。

将Android Sdk Lacation的路径配置到环境变量中的系统变量的Path下

 

  2.如果配置好了环境变量,在cmd中输入adb还是出现同样的问题,那么就很可能是下面这种情况了。
  查看sdk的安装文件夹,发现在\tools文件夹下面没有adb.exe,而在\platform-tools下面才有。将platform-tools的路径覆盖掉Path中的原来的\tools路径。

通过以上方法成功解决问题!!

android – Context.startForegroundService()然后没有调用Service.startForeground

android – Context.startForegroundService()然后没有调用Service.startForeground

我的应用程序将在MainActivity的onCreate中调用startForegroundService(intent).我在服务的onCreate和startCommand中放入了startForeground(ON_SERVICE_CONNECTION_NID,notification).
但我偶尔也会收到这个错误.

Exception android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1775)
android.os.Handler.dispatchMessage (Handler.java:105)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:6541)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)

怎么会发生这种情况?
是否有可能在5秒内没有调用onCreate或startCommand?
如果是这样,我们应该如何调用startForegroundService而没有错误?

更新2017-12-09

我不知道为什么每个人都说这和这个问题一样:Context.startForegroundService() did not then call Service.startForeground()
你甚至可以在那里找到我的评论.

它的不同之处在于你可以在这个问题的第一行看到的.我已将startForegroundService和startForeground放在正确的位置,但它仍然随机显示此错误.

以下是Google问题跟踪器:https://issuetracker.google.com/issues/67920140

Stopping the service before this happens will cause a crash.

这是关于服务生命周期的另一个问题.
服务关闭后,可能会错误地触发断言.

解决方法

我面临同样的问题,花了很长时间找到解决方案,你可以尝试下面的代码.如果您使用Service然后将此代码放入onCreate,则使用Intent Service,然后将此代码放在onHandleIntent中.

if (Build.VERSION.SDK_INT >= 26) {
    String CHANNEL_ID = "my_app";
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID,"MyApp",notificationmanager.IMPORTANCE_DEFAULT);
    ((notificationmanager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
    Notification notification = new NotificationCompat.Builder(this,CHANNEL_ID)
            .setContentTitle("")
            .setContentText("").build();
    startForeground(1,notification);
}

并称之为

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        context.startForegroundService(getSyncIntent(context));
    } else {
        context.startService(getSyncIntent(context));
    }

android – enableReaderMode和enableForegroundDispatch有什么区别?

android – enableReaderMode和enableForegroundDispatch有什么区别?

我找到了两种让 Android应用检测和处理NFC标签的方法:

> NfcAdapter.enableReaderMode(活动,回调,标志,附加组件),然后在回调中接收标签信息.
> NfcAdapter.enableForegrounddispatch(activity,intent,filters,techLists)然后在onNewIntent(intent)活动方法中接收标记信息.

我目前使用第二种方法,但是,我最近发现了enableReaderMode方法,并想知道是否更好地使用它来处理NFC标签.

那么enableReaderMode和enableForegrounddispatch有什么区别?

解决方法

前台调度系统

自Android 2.3.3(基本上是Android NFC的开始)以来,forground dispatch系统(NfcAdapter.enableForegrounddispatch())存在.因此,所有具有NFC功能的Android设备都支持此方法.

前台调度系统用于在处理NFC发现事件(即,从对等设备接收的已发现的NFC标签和NDEF消息)中给出当前处于前景优先级的活动.这意味着即使另一个应用程序(通过AndroidManifest.xml中的意图过滤器)注册了特定标签类型或NDEF数据,NFC事件仍将传递给前台活动而不是其他活动.因此,该方法不会改变Android侦听NFC设备(NFC标签,P2P设备)的方式,只会改变处理已发现设备的优先级.

读者模式API

读者模式API(NfcAdapter.enableReaderMode())是在Android 4.4中引入的.因此,并非所有具有NFC功能的Android设备都支持此方法.

与前台调度系统相反,阅读器模式API确实改变了Android侦听NFC设备的方式. reader-mode API禁用点对点模式.例如,这允许您发现具有对等模式的其他设备的卡仿真模式以及同时启用的卡仿真模式(如Android HCE的情况). (通常,这样的设备会被发现为点对点设备,而Android应用程序将无法访问卡仿真功能.)

此外,您可以更改NFC阅读器模式的特定参数,例如,您可以

>定义NFC读取器轮询的标签技术,>通过向标签发送某个命令序列并检查是否仍然收到响应来定义Android测试标签是否仍然存在的时间间隔,>阻止Android自动向标签发送命令,以测试标签是否包含NDEF消息,>阻止Android在标记发现时播放声音.

android – ParseFacebookUtils [V4-1.9.1] logInWithReadPermissionsInBackground无效日期

android – ParseFacebookUtils [V4-1.9.1] logInWithReadPermissionsInBackground无效日期

调用logInWithReadPermissionsInBackground始终返回null user和invalid date error
com.parse.ParseRequest$ParseRequestException: Invalid date

我正在使用ParseFacebookUtils [V4-1.9.1]

这是我的代码

private void onLoginUserClicked ()
{
    final List<String> permissions = new ArrayList<String>();
    permissions.add("public_profile");
    permissions.add("user_status");
    permissions.add("user_friends");

    ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this,permissions,new LogInCallback() {
        @Override
        public void done(ParseUser user,ParseException err) {
            if (user == null) {
                Log.d("MyApp","Error: "+err);
            } else
            {
                if (user.isNew()) {
                    Log.d("MyApp","User signed up and logged in through Facebook!");
                } else {
                    Log.d("MyApp","User logged in through Facebook!");

                }
            }
        }
    });
}

什么都没有 – 正常我无法克服这一点任何帮助?

解决方法

我有类似的问题.

我错过了这个方法:

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
    super.onActivityResult(requestCode,resultCode,data);
    ParseFacebookUtils.onActivityResult(requestCode,data);
}

今天的关于权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE权限拒绝是什么意思的分享已经结束,谢谢您的关注,如果想了解更多关于Android Studio真机测试——Error running app: No target device found、android – Context.startForegroundService()然后没有调用Service.startForeground、android – enableReaderMode和enableForegroundDispatch有什么区别?、android – ParseFacebookUtils [V4-1.9.1] logInWithReadPermissionsInBackground无效日期的相关知识,请在本站进行查询。

本文标签: