Java 如何修复Android Studio中停止的应用程序?
当我调试应用程序成功构建,但在我的监控设备上出现“应用程序已停止”通知时,会导致致命的崩溃。在我的logcat中,我发现了两个错误,以…引起的行开头。现在,我的问题是,我不知道如何处理这些错误,所以我修复了我的应用程序。我对Android编程还很陌生 日志:Java 如何修复Android Studio中停止的应用程序?,java,android,android-studio,debugging,build.gradle,Java,Android,Android Studio,Debugging,Build.gradle,当我调试应用程序成功构建,但在我的监控设备上出现“应用程序已停止”通知时,会导致致命的崩溃。在我的logcat中,我发现了两个错误,以…引起的行开头。现在,我的问题是,我不知道如何处理这些错误,所以我修复了我的应用程序。我对Android编程还很陌生 日志: 2020-05-07 06:02:51.037 27871-27871/? E/AndroidRuntime: FATAL EXCEPTION: main Process: net.groupkse.indupendo, PID:
2020-05-07 06:02:51.037 27871-27871/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.groupkse.indupendo, PID: 27871
java.lang.RuntimeException: Unable to start service net.groupkse.indupendo.PlayerService@bdbfc6 with Intent { act=net.groupkse.indupendo.action.startforeground cmp=net.groupkse.indupendo/.PlayerService (has extras) }: java.lang.SecurityException: Permission Denial: startForeground from pid=27871, uid=10172 requires android.permission.FOREGROUND_SERVICE
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3804)
at android.app.ActivityThread.access$1700(ActivityThread.java:213)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1731)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6819)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
Caused by: java.lang.SecurityException: Permission Denial: startForeground from pid=27871, uid=10172 requires android.permission.FOREGROUND_SERVICE
at android.os.Parcel.createException(Parcel.java:1950)
at android.os.Parcel.readException(Parcel.java:1918)
at android.os.Parcel.readException(Parcel.java:1868)
at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5067)
at android.app.Service.startForeground(Service.java:695)
at net.groupkse.indupendo.PlayerService.showNotification(PlayerService.java:95)
at net.groupkse.indupendo.PlayerService.onStartCommand(PlayerService.java:43)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3785)
at android.app.ActivityThread.access$1700(ActivityThread.java:213)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1731)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6819)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:10030)
at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1268)
at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:949)
at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:21931)
at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:10685)
2020-05-07 07:06:27.533 7058-7058/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.groupkse.indupendo, PID: 7058
java.lang.RuntimeException: Unable to start service net.groupkse.indupendo.PlayerService@bdbfc6 with Intent { act=net.groupkse.indupendo.action.startforeground cmp=net.groupkse.indupendo/.PlayerService (has extras) }: java.lang.SecurityException: Permission Denial: startForeground from pid=7058, uid=10172 requires android.permission.FOREGROUND_SERVICE
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3804)
at android.app.ActivityThread.access$1700(ActivityThread.java:213)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1731)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6819)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
Caused by: java.lang.SecurityException: Permission Denial: startForeground from pid=7058, uid=10172 requires android.permission.FOREGROUND_SERVICE
at android.os.Parcel.createException(Parcel.java:1950)
at android.os.Parcel.readException(Parcel.java:1918)
at android.os.Parcel.readException(Parcel.java:1868)
at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5067)
at android.app.Service.startForeground(Service.java:695)
at net.groupkse.indupendo.PlayerService.showNotification(PlayerService.java:95)
at net.groupkse.indupendo.PlayerService.onStartCommand(PlayerService.java:43)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3785)
at android.app.ActivityThread.access$1700(ActivityThread.java:213)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1731)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6819)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
Caused by: android.os.RemoteException: Remote stack trace:
以下是我怀疑错误产生的两种方法:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.getStringExtra("url") != null)
playStream(intent.getStringExtra("url"));
if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
Log.i("info", "Start foreground service!");
showNotification();
} else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) {
Log.i("info", "Prev pressed.");
} else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) {
Log.i("info", "Play pressed.");
} else if (intent.getAction().equals(Constants.ACTION.NEXT_ACTION)) {
Log.i("info", "Next pressed.");
} else if (intent.getAction().equals(Constants.ACTION.STOPFOREGROUND_ACTION)) {
Log.i("info", "Stop foreground received.");
stopForeground(true);
stopSelf();
}
return START_REDELIVER_INTENT;
}
以及:
注意:我注意到在Android Studio中,新的任务“Notification.Builder”被一行类似取消的语句打断;我不知道那是什么意思 您有这个错误
原因:java.lang.SecurityException:权限拒绝:
从pid=27871、uid=10172开始的起始地面
android.permission.FOREGROUND\u服务
这意味着您需要在Android清单中添加权限
<manifest ...>
...
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
<application ...>
...
</manifest>
...
...
. 非常感谢你!它似乎解决了这个问题。但是,我确实有一些错误没有纠正,如下所示:在我的答案中…@Klemloydmwenya请创建新的问题请不要发布答案只是为了链接或复制其他用户的答案。如果您认为另一个问题已经有了解决方案,请将当前问题标记为重复问题。谢谢
<manifest ...>
...
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
<application ...>
...
</manifest>