`
king_tt
  • 浏览: 2229022 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android中如何做到自定义的广播只能有指定的app接收

 
阅读更多

今天没吊事,又去面试了,具体哪家公司就不说了,因为我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目,好吧,我错了。。。其实当我们已经在工作的时候,我们可以在空闲的时间去面一面,因为面试有很多好处的:

第一点:你知道这个公司的具体地址了,以后和朋友说的时候也是有话题的

第二点:这点很重要,看看其他公司的面试题(现在有的公司还在采用笔试题这个环节,真心无语了,题目全是从网上找的,很没有意思,所以我只要见到有笔试题的一律pass,个人感觉面到现在,阿里和滴滴还是不错的,他们会问你他们在项目中遇到的具体问题,问你该怎么解决,这种答案就不确定,考你的是经验)


上面说了很多,下面进入正题吧:

题目:Android中如何做到自定义的广播只能有指定的app接收

思路:其实我当时第一次想到的答案应该是给广播添加访问权限,但是我之前弄过给Activity的访问添加过权限,所以这里不确定对不对,但是我感觉Android中的四大组件应该一样吧。擦,结果被我蒙对了。哈哈~~


我们在使用Android中的API形式,或者使用adb命令都可以在外部打开一个应用的Activity/Service,以及发送一个广播。所以这个对于一个应用来说是很不安全的。即权限是一种保护机制。


解决思路:

其实没啥技术可言的,就是Android中可以自定义权限的,对于四大组件的访问加上一层保护,不多说了,直接上代码:


发送广播:

package com.tt.test;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ((Button)findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				   Intent i = new Intent("COM.MESSAGE");
				   i.addCategory("receiver");
				   i.putExtra("message", "haha");
				   sendOrderedBroadcast(i, "xvtian.gai.receiver");
			}
		});
    }
}
AndroidManifest.xml:

<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>  
<permission android:protectionLevel="normal" android:name="xvtian.gai.receiver"></permission>

接收广播:

package com.tt.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class Receiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d("TAG", "receiver intent:" + intent.toString());
	}
	
}
AndroidManifest.xml

<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
<receiver android:name=".Receiver" android:permission="xvtian.gai.receivers">
       <intent-filter>
         <action android:name="COM.MESSAGE" />
         <category android:name="receiver" />
       </intent-filter>
</receiver>


简单吧,没任何技术可言,同理我们可以对其他的组件进行权限保护(可能用的比较多的是对Activity访问添加权限),当然我一般开发的应用中貌似不会用到这些东东,但是如果想学习的话,应该去找那些做安全的应用,比如所360手机卫士,反编译之后打开他的AndroidManifest.xml文件,你会震惊的,同时你也可以学到很多。哈哈~~


Demo下载地址:

http://download.csdn.net/detail/jiangwei0910410003/7973867




分享到:
评论

相关推荐

    android 跨应用程序广播发送接受

    在Android系统中,跨应用程序广播(Cross-App Broadcasting)是一种通信机制,允许应用程序之间传递消息,无需知道接收方确切的身份。这种机制对于组件间的解耦合以及系统事件的全局通知非常有用。本篇文章将深入...

    android之appwidget(三)自定义action广播

    在Android系统中,BroadcastReceiver是一种组件,它监听系统或应用发出的广播意图(Intent),并在接收到匹配的广播时执行相应的操作。在AppWidget中,我们通常使用BroadcastReceiver来响应用户的交互,例如点击小...

    adb发送广播

    在Android开发中,广播(Broadcast)是一种非常重要的组件,它允许应用程序之间进行异步通信,即使它们在后台运行。`adb`(Android Debug Bridge)是Android开发者常用的工具,用于调试和控制连接到计算机的Android...

    Android自学笔记-17-广播接收者(BroadcastReceiver)

    在Android开发中,广播接收者(BroadcastReceiver)是Android四大组件之一,它是系统用来传递全局消息的一种机制。当你创建一个BroadcastReceiver,你可以监听系统或应用发送的广播,并在接收到广播时执行相应的处理...

    Android自定义显示电池电量

    在Android系统中,电池电量的显示通常是系统默认的,但有时候开发者或用户可能希望自定义电池电量的展示方式,以实现独特的UI效果或者更个性化的交互体验。本篇将深入探讨如何在Android应用中实现自定义电池电量的...

    AndroidSideBar,本项目使用辅助功能 AccessibilityService 实现 Android 侧边栏悬浮窗效果.实现的功能包括返回,主页,最近任务,启动某个 app,系统音量和亮度调节,开机启动,接收到自定义广播隐藏侧边栏等.本项目适配 Android 5.0 到 Android 9.0..zip

    这个悬浮窗提供了多种实用功能,包括但不限于快速返回、打开主屏幕、切换到最近使用的应用、启动指定的应用、调整系统音量和屏幕亮度,并且支持设备开机自动启动以及在接收到特定自定义广播时自动隐藏侧边栏。...

    接收开机广播

    在Android系统中,广播接收器(Broadcast Receiver)是四大组件之一,它允许应用程序接收和响应系统或自定义广播事件。"接收开机广播"是Android应用开发中的一个常见需求,主要用于在设备启动时执行某些初始化任务...

    1:android5.1跨应用开启服务2:广播必须在activity或者service启动之后才能发挥作用

    描述:app有两个: localApp, RemoteApp. 实现功能: 通过localApp远程启动RemoteApp,让RemoteApp处理业务流程。 技能:1:实现跨应用的开启服务,2:当服务开启后,远程的AndroidManifest.xml文件被加载,这时候,...

    BroadCastTest.zip 安卓动态注册广播接收器demo(含注释)

    在Android开发中,广播接收器(BroadcastReceiver)是一种重要的组件,用于监听系统或应用程序的特定事件,例如设备开机、网络状态变化等。本压缩包"BroadcastTest.zip"提供了一个关于安卓动态注册广播接收器的示例...

    android 自定义锁屏实现原理

    首先,需要在 Android 项目的配置文件 AndroidManifest.xml 中添加一个 receiver,用于接收系统的 BOOT_COMPLETED 广播事件,该事件是在系统启动时触发的。这样,当系统启动时,我们的锁屏服务就可以被启动。 ```...

    Android-Android中最漂亮的短信App

    "Android中最漂亮的短信App"这一标题暗示了我们正在探讨一个注重设计美学和功能实用性的应用。在这个项目中,我们将深入Android开发的核心,学习如何构建一个具有吸引力且用户友好的短信应用。 首先,我们要关注的...

    android app widget demo

    在Android中,BroadcastReceiver是接收系统或自定义广播事件的组件。对于App Widget,我们可以创建一个BroadcastReceiver,当接收到特定广播时,更新Widget的显示内容。例如,如果你的Widget显示的是新闻标题,可以...

    酒店Android APP 项目

    在酒店APP项目中,可能包含了多个Activity来实现不同的功能,如登录、预订、查询等,而BroadcastReceiver可能用于接收系统或自定义广播事件。 5. **Android权限管理**:在Android系统中,为了保护用户隐私,某些...

    阅读APP类Android项目源码,高仿爱阅读APP

    在源码中,你会看到应用通常包含多个组件,如Activity(用于用户交互的主屏幕)、Service(后台运行的服务)、BroadcastReceiver(广播接收器)和ContentProvider(数据提供者)。这些组件是Android应用的基础,理解...

    两个apk之间广播互相通信及ContentProvider监听数据库的变换

    在两个apk之间通信时,我们可以创建自定义广播,其中一个apk作为发送者,另一个作为接收者。发送者通过Intent发送一个带有特定动作的广播,接收者注册对应的BroadcastReceiver来监听并处理这个广播。以下是创建...

    Android自定义时钟

    本文将基于给定的开源项目“Android自定义时钟”进行解析,介绍如何在Android应用中实现自己的时钟组件。 首先,理解Android的时钟工作原理至关重要。Android时钟通常依赖于系统提供的`android.appwidget....

    基于Android的记账APP开发与设计.zip

    广播接收器可以监听系统或自定义广播事件;内容提供者则用于数据共享。在记账APP中,我们主要关注活动和可能使用到的服务,用于实现用户界面和后台数据处理。 UI设计是应用用户体验的关键。Android提供了丰富的视图...

    android之appwidget(一)简单appwidget

    当然,AppWidget的功能远不止于此,你可以实现更复杂的功能,如自定义小部件服务(AppWidgetService)、接收数据更新(通过BroadcastReceiver或ContentProvider)等。继续深入学习,你就能构建出更加丰富的桌面组件...

    uni-app调用Android原生可以实现通信及打开WiFi

    例如,uni-app可以通过`uni.sendBroadcast`方法发送一个自定义的广播,Android端的BroadcastReceiver接收到后执行相应操作,如读取系统状态、控制硬件等。\n\n3. **打开WiFi功能**\n 在Android端,需要使用`...

    Android Studio实现一个简约记账APP,代码附详细注释

    可以添加定时任务或广播接收器,当满足特定条件(如每日结束)时,向用户发送通知,提醒他们查看或输入记账信息。 8. **权限管理**: 如果应用需要读写外部存储或访问网络(例如同步到云端),别忘了在`...

Global site tag (gtag.js) - Google Analytics