Android11 应用自定义服务化对象为null
记录一下之前遇到的问题修改成功后,再次遇到忘记怎么改了。
app的libs下正常引入jar
classes.jar下是已经自定义服务的几个Manager,在AS里面也正常引入编译,配置build.gradle:
在MainActivity里面将自定义服务(DiagnosticManager )实例化:
package com.battmon.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.information.diagnostic.DiagnosticManager;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private Button btn1;
private ActivityManager activityManager;
private DiagnosticManager diagnosticManager;
private DiagnosticManager.EthernetStatusChangeListener changeListener = new DiagnosticManager.EthernetStatusChangeListener() {
@Override
public void onAvailabilityChanged(String s, boolean b) {
Log.d(TAG, "onAvailabilityChanged: " s " avail : " b);
}
};
@SuppressLint("WrongConstant")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn_1);
btn1.setOnClickListener(this);
activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
diagnosticManager = (DiagnosticManager) this.getSystemService("diagnostic");
Log.d(TAG, "onCreate: " diagnosticManager);
Log.d(TAG, "onCreate: " activityManager);
if (diagnosticManager != null) {
diagnosticManager.addListener(changeListener);
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_1:
diagnosticManager.getChargeStatus();
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (changeListener != null) {
diagnosticManager.removeListener(changeListener);
}
}
}
实例化对象为null
打印实例化对象log显示:
2022-08-22 14:09:34.705 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: null
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: android.app.ActivityManager@12c87fd
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication
2022-08-22 14:09:34.742 9423-9423/com.battmon.myapplication D/ViewRootImpl[MainActivity]: hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
2022-08-22 14:09:34.756 9423-9423/com.battmon.myapplication V/PhoneWindow: DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@e4a23bb, this = DecorView@a1660d8[MainActivity]
2022-08-22 14:09:34.770 9423-9423/com.battmon.myapplication V/PhoneWindow: DecorView setVisiblity: visibility = 4, Parent = android.view.ViewRootImpl@e4a23bb, this = DecorView@a1660d8[MainActivity]
***在检查自己定义的服务没有问题之后,认为是在编译时,jar下的类没有编译进去,在网上查了一遍之后jar的引用没有问题,此时,在另外一个窗口看到系统log信息,因为只查看当前应用的log所以将其他log过滤了,log显示:
2022-08-22 14:09:34.485 9423-9423/com.battmon.myapplication W/n.myapplicatio: Accessing hidden method Lcom/information/diagnostic/DiagnosticManager;->getEthernetStatus()Z (blacklist, linking, denied)
2022-08-22 14:09:34.485 9423-9423/com.battmon.myapplication W/n.myapplicatio: Accessing hidden method Lcom/information/diagnostic/DiagnosticManager;->getChargeStatus()I (blacklist, linking, denied)
2022-08-22 14:09:34.705 353-353/? E/SELinux: avc: denied { find } for pid=9423 uid=10133 name=diagnostic scontext=u:r:untrusted_app:s0:c133,c256,c512,c768 tcontext=u:object_r:diagnostic_service:s0 tclass=service_manager permissive=0
2022-08-22 14:09:34.705 9423-9423/com.battmon.myapplication W/SystemServiceRegistry: No service published for: diagnostic
2022-08-22 14:09:34.705 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: null
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: android.app.ActivityManager@12c87fd
2022-08-22 14:09:34.706 9423-9423/com.battmon.myapplication D/MainActivity: onCreate: null
这不就熟悉起来了,log显示当前应用为黑名单应用,拒绝访问,第三行显示缺少SELinux权限,那么到对应的untrusted_app加上find权限不就ok了。
修改device/mediatek/sepolicy/bsp/plat_private/untrusted_app.te文件,给我自定义的diagnostic_service添加find权限
allow untrusted_app diagnostic_service:service_manager find;
测试结果:
2022-08-22 14:54:10.566 5757-5757/com.battmon.myapplication D/MainActivity: onCreate: com.information.diagnostic.DiagnosticManager@66a9583
2022-08-22 14:54:10.567 5757-5757/com.battmon.myapplication D/MainActivity: onCreate: android.app.ActivityManager@b41c300
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfggki
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13