android11添加自定义静态广播无法获取解析

硬件平台:展锐

软件平台:Android11

    近日,新做一需求,需要app间实现接口的调用,但是被调用app的功能接口却在activity类中实现,需求上看是需要被调用的app未启动也可以实现功能的调用,无奈,实现了自定义的广播,在广播里重新实现了activity类里边的功能,code如下:

diff --git a/vendor/sprd/platform/packages/apps/LogManager/src/com/sprd/logmanager/BootCompletedReceiver.java b/vendor/sprd/platform/packages/apps/LogManager/src/com/sprd/logmanager/BootCompletedReceiver.java
index 335af6dbab..c729b2b25f 100755
--- a/vendor/sprd/platform/packages/apps/LogManager/src/com/sprd/logmanager/BootCompletedReceiver.java
+++ b/vendor/sprd/platform/packages/apps/LogManager/src/com/sprd/logmanager/BootCompletedReceiver.java
@@ -14,7 +14,12 @@ import com.sprd.logmanager.logui.SceneInfo;
 import com.sprd.logmanager.database.LogSceneManager;
 import com.sprd.logmanager.database.LogManagerPreference;
 import com.sprd.logmanager.logcopy.service.LogCopyService;
+import com.sprd.logmanager.utils.ShellUtils;
 
+import android.os.Message;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.HandlerThread;
 
 public class BootCompletedReceiver extends BroadcastReceiver {
 
@@ -22,6 +27,11 @@ public class BootCompletedReceiver extends BroadcastReceiver {
 
     private LogManagerPreference mLogManagerPreference;
     private APLogControl mApLogControl;
+    private LogHandler mLogHandler;
+    HandlerThread mLogHandlerThread;
+
+
+    private static final int CLEAR_LOG = 0;
 
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -73,9 +83,57 @@ public class BootCompletedReceiver extends BroadcastReceiver {
                 }).start();
             }
 
 public class BootCompletedReceiver extends BroadcastReceiver {
 
@@ -22,6 +27,11 @@ public class BootCompletedReceiver extends BroadcastReceiver {
 
     private LogManagerPreference mLogManagerPreference;
     private APLogControl mApLogControl;
+    private LogHandler mLogHandler;
+    HandlerThread mLogHandlerThread;
+
+
+    private static final int CLEAR_LOG = 0;
 
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -73,9 +83,57 @@ public class BootCompletedReceiver extends BroadcastReceiver {
                 }).start();
             }
         }
+
+        if (action != null && action.equals("TAL.APP.REMOVE.YLOG")) {
+            if (null == mLogHandlerThread) {
+                mLogHandlerThread = new HandlerThread(TAG);
+                mLogHandlerThread.start();
+            }
+
+            if (null == mLogHandler) {
+                mLogHandler = new LogHandler(mLogHandlerThread.getLooper());
+            }
+
+            Message clearLog = mLogHandler
+                     .obtainMessage(CLEAR_LOG);
+            mLogHandler.sendMessage(clearLog);
+        }
+
         /* @} */
     }
 
+    public void deleteYlogDir() {
+        try {
+            Log.d(TAG, "deleteYlogDirectoryOnly work!");
+            String[] logPaths = new String[] { "/data/ylog",
+                    "/storage/emulated/0/ylog", "/storage/sdcard0/ylog" };
+            for (int i = 0; i < logPaths.length; i++) {
+                String cmd = String.format("rm -rf %s ", logPaths[i]);
+                ShellUtils.runCommand(cmd);
+            }
+            return;
+        } catch (Exception e) {
+            // TODO: handle exception
+            e.printStackTrace();
+        }
+    }
+
+    class LogHandler extends Handler {
+        public LogHandler(Looper looper) {
+                 super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case CLEAR_LOG:
+                    deleteYlogDir();
+                    Log.d(TAG, "====== app want to clear log.");
+                break;
+            }
+        }
+    }
+
     public  void doBootAction(Context context){
         /**
          * create modem assert listener thread under situation as follow: 1.boot completed 2.when
diff --git a/vendor/sprd/platform/packages/apps/LogManager/user/AndroidManifest.xml b/vendor/sprd/platform/packages/apps/LogManager/user/AndroidManifest.xml
index cf150c1943..43385c05ab 100755
--- a/vendor/sprd/platform/packages/apps/LogManager/user/AndroidManifest.xml
+++ b/vendor/sprd/platform/packages/apps/LogManager/user/AndroidManifest.xml
@@ -92,6 +92,7 @@
             android:directBootAware="true">
             <intent-filter android:priority="1000">
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
+                <action android:name="TAL.APP.REMOVE.YLOG" />
                 <action android:name="com.unisoc.cit.sprdylog" />
             </intent-filter>
         </receiver>
diff --git a/vendor/sprd/platform/packages/apps/LogManager/userdebug/AndroidManifest.xml b/vendor/sprd/platform/packages/apps/LogManager/userdebug/AndroidManifest.xml
index 5549984178..2bbee08000 100755
--- a/vendor/sprd/platform/packages/apps/LogManager/userdebug/AndroidManifest.xml
+++ b/vendor/sprd/platform/packages/apps/LogManager/userdebug/AndroidManifest.xml
@@ -90,6 +90,7 @@
             android:directBootAware="true">
             <intent-filter android:priority="1000">
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
+                <action android:name="TAL.APP.REMOVE.YLOG" />
             </intent-filter>
         </receiver>
         <provider android:name="com.sprd.logmanager.database.LogSceneProvider"

    需要注意的点,就是广播需要注册为静态广播,否则app不启动无法响应,再就是注意广播的发送方需要添加intent字段才可以,示例如下:

1、使用am命令模拟如下:

adb shell am broadcast -n "com.autonavi.amapauto/com.autonavi.amapauto.adapter.internal.AmapAutoBroadcastReceiver"

2、代码实现如下:

private void setNaviCasualMute(int mute) {
    Intent intent = new Intent();
    intent.setClassName("com.autonavi.amapauto", "com.autonavi.amapauto.adapter.internal.AmapAutoBroadcastReceiver");
    mContext.sendBroadcastAsUser(intent, UserHandle.SYSTEM);

}

Mark记录....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值