当前位置: 首页 > news >正文

人妖和人妖做的小视频网站关键词排名推广方法

人妖和人妖做的小视频网站,关键词排名推广方法,什么是企业网站营销,品牌vi设计有哪些内容该文档就是在android12系统上提供一个广播接收器,app端发送一个广播,并且带入apk的地址就可以实现安装 1、广播注册 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java 首先要导入的依赖 import android.app.P…

该文档就是在android12系统上提供一个广播接收器,app端发送一个广播,并且带入apk的地址就可以实现安装

1、广播注册

frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

首先要导入的依赖

import android.app.PendingIntent;
import android.content.IntentSender;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
// import android.os.RemoteException;
import android.content.ComponentName;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInstaller;
import android.util.Log;
import static android.content.pm.PackageInstaller.SessionParams.UID_UNKNOWN;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.parsing.ApkLiteParseUtils;
import android.content.pm.parsing.PackageLite;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseTypeImpl;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.net.Uri;
//import com.android.packageinstaller.InstallEventReceiver;
import com.android.server.policy.TemporaryFileManager;
import com.android.internal.content.PackageHelper;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
import android.os.Environment;

去定义一个变量
private final static SynchronousQueue<Intent> mInstallResults = new SynchronousQueue<>();

开始去定义那个广播,安装的广播
filter.addAction("com.android.packageinstaller.ACTION_SILENCE_INSTALL"); filter.addAction("android.intent.action.BOOT_COMPLETED");

然后就是收到安装的广播之后应该去干什么

  BroadcastReceiver mDockReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {mDefaultDisplayPolicy.setDockMode(intent.getIntExtra(Intent.EXTRA_DOCK_STATE,Intent.EXTRA_DOCK_STATE_UNDOCKED));}else if("com.android.packageinstaller.ACTION_SILENCE_INSTALL".equals(intent.getAction())){android.util.Log.e("yanf yim","enter install_app------");Intent mIntent1 = new Intent();mIntent1.setAction("com.android.install_app1");mIntent1.setComponent(new ComponentName("com.android.settings","com.android.settings.SDMountInstallReceiver"));String apkFilePath = intent.getStringExtra("apkFilePath");mIntent1.putExtra("path_name",apkFilePath);context.sendBroadcast(mIntent1);} 

在这里就是去启动了Settings下的SDMountInstallReceiver

2、启动设置下的SDMountInstallReceiver

2.1 先去注册

代码路径 packages\apps\Settings\AndroidManifest.xml

	<receiver android:name=".SDMountInstallReceiver"android:exported="true"><intent-filter android:priority="1000">  <action android:name="com.android.install_app1"/> <action android:name="com.android.install_app2"/>  <action android:name="com.android.install_app3"/></intent-filter>  </receiver> 
<!--add end-->
2.2 安装的服务

packages\apps\Settings\src\com\android\settings\SDMountInstallReceiver.java

/*****接收广播,静默安装apk*/
package com.android.settings;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import java.io.File;
import android.os.Build;
import java.io.IOException;
import android.content.ContentValues;
import android.content.IntentFilter;
import android.util.Log;
import android.content.pm.PackageManager;
import android.os.storage.StorageManager;
import android.os.Environment;
import android.os.Bundle;
import android.os.SystemProperties;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.app.PendingIntent;
import android.content.IntentSender;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
// import android.os.RemoteException;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.util.Log;import androidx.core.content.FileProvider;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class SDMountInstallReceiver extends BroadcastReceiver {private static final String TAG="Install SDMountInstallReceiver";private static final String PROP_SD_EXTERNAL_PATH = "vold.path.external_sd";private String apksPath = " ";private Bundle bundleSimple;private PackageManager mPackageManager;@Overridepublic void onReceive(final Context context, Intent intent) {if ("com.android.install_app1".equals(intent.getAction())) {String pathName = intent.getStringExtra("path_name");android.util.Log.e("xnq", "enter SDMountInstallReceiver------1");installApk(context, pathName);android.util.Log.e("xnq", "enter SDMountInstallReceiver------2");}}/*** 显示安装** @param context* @param filePath*/public static synchronized void install(Context context, String filePath) {File apkFile = new File(filePath);Log.e(TAG, "apkPath " + apkFile.getAbsolutePath());if (!apkFile.exists()) {Log.e(TAG, "apk 不存在!");return;}Intent installApkIntent = new Intent();installApkIntent.setAction(Intent.ACTION_VIEW);installApkIntent.addCategory(Intent.CATEGORY_DEFAULT);installApkIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//这里只适配了8.0需要有权限if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {boolean hasInstallPermission = context.getPackageManager().canRequestPackageInstalls();if (hasInstallPermission) {//通过FileProvider赋予apk访问权限Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", apkFile);installApkIntent.setDataAndType(uri, "application/vnd.android.package-archive");installApkIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);if (context.getPackageManager().queryIntentActivities(installApkIntent, 0).size() > 0) {context.startActivity(installApkIntent);}}}}/*** 卸载apk** @param context* @param packageName*/public static synchronized void uninstallPackage(Context context, String packageName) {if (!isSystemSign(context)) {Log.e(TAG, "apk不具备系统签名,无法使用静默安装功能!");uninstall(context, packageName);return;}Intent intent = new Intent(context, SDMountInstallReceiver.class);intent.setAction(PackageInstaller.EXTRA_STATUS);//创建卸载广播意图PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);//获取安装程序PackageInstaller installer = context.getPackageManager().getPackageInstaller();//执行卸载操作if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//卸载最高版本apkinstaller.uninstall(new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST), pendingIntent.getIntentSender());} else {//卸载apkinstaller.uninstall(packageName, pendingIntent.getIntentSender());}}/*** 显式卸载** @param context* @param packageName*/public static synchronized void uninstall(Context context, String packageName) {//获取删除包名的URIUri uri = Uri.parse("package:" + packageName);Intent intent = new Intent();//设置我们要执行的卸载动作intent.setAction(Intent.ACTION_DELETE);//设置获取到的URIintent.setData(uri);context.startActivity(intent);}/*** 安装apk* @param context* @param filePath*/public static synchronized void installApk (Context context, String filePath){if (!isSystemSign(context)) {Log.e(TAG, "apk不具备系统签名,无法使用静默安装功能!");//install(context, filePath);return;}File apkFile = new File(filePath);Log.e(TAG, "apkPath " + apkFile.getAbsolutePath());if (!apkFile.exists()) {Log.e(TAG, "apk 不存在!");return;}//1. 获取包安装程序PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();//2. 安装参数PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);//设置大小sessionParams.setSize(apkFile.length());//3. 会话idint sessionId = createSession(packageInstaller, sessionParams);Log.e(TAG, "sessionId " + sessionId);if (sessionId != -1) {//4. 将数据拷贝进sessionboolean copySuccess = copyInstallFile(packageInstaller, sessionId, filePath);Log.e(TAG, "copySuccess " + copySuccess);if (copySuccess) {//5. 执行安装execInstallCommand(context, packageInstaller, sessionId);}}}/*** 创建sessionId** @param packageInstaller* @param sessionParams* @return*/private static int createSession (PackageInstallerpackageInstaller, PackageInstaller.SessionParams sessionParams){int sessionId = -1;try {//根据sessionParams创建sessionIdsessionId = packageInstaller.createSession(sessionParams);} catch (IOException e) {e.printStackTrace();}return sessionId;}/*** 拷贝apk文件,写入PackageInstaller.Session** @param packageInstaller* @param sessionId* @param apkFilePath* @return*/private static boolean copyInstallFile (PackageInstaller packageInstaller,int sessionId, String apkFilePath){InputStream in = null;OutputStream out = null;PackageInstaller.Session session = null;boolean success = false;try {File apkFile = new File(apkFilePath);//通过sessionId获取PackageInstaller.Sessionsession = packageInstaller.openSession(sessionId);//打开输入流out = session.openWrite("base.apk", 0, apkFile.length());//创建文件流in = new FileInputStream(apkFile);int total = 0, c;byte[] buffer = new byte[1024 * 1024];//读取文件流while ((c = in.read(buffer)) != -1) {total += c;out.write(buffer, 0, c);}//同步数据session.fsync(out);Log.i(TAG, "streamed " + total + " bytes");success = true;} catch (IOException e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}if (session != null) {session.close();}}return success;}/*** 执行安装** @param context* @param packageInstaller* @param sessionId* @return*/private static void execInstallCommand (Context context, PackageInstaller packageInstaller,int sessionId){PackageInstaller.Session session = null;try {//通过sessionId获取PackageInstaller.Sessionsession = packageInstaller.openSession(sessionId);//创建一个广播意图Intent intent = new Intent(context, SDMountInstallReceiver.class);intent.setAction(PackageInstaller.EXTRA_STATUS);//设置广播接受者PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);//执行安装命令,安装完成将发送广播通知session.commit(pendingIntent.getIntentSender());} catch (Exception e) {e.printStackTrace();} finally {if (session != null) {session.close();}}}/*** 根据包名判断app是否具有系统签名*/private static boolean isSystemSign (Context context){return context.getPackageManager().checkSignatures(Binder.getCallingUid(), android.os.Process.SYSTEM_UID) == PackageManager.SIGNATURE_MATCH;}}

文章转载自:
http://falsely.tgcw.cn
http://eustacy.tgcw.cn
http://sherardize.tgcw.cn
http://campground.tgcw.cn
http://segmentalize.tgcw.cn
http://cattleya.tgcw.cn
http://mizzen.tgcw.cn
http://said.tgcw.cn
http://moralist.tgcw.cn
http://panache.tgcw.cn
http://lammister.tgcw.cn
http://quindecennial.tgcw.cn
http://preseason.tgcw.cn
http://siddhartha.tgcw.cn
http://promine.tgcw.cn
http://petrograph.tgcw.cn
http://propaedeutic.tgcw.cn
http://outclass.tgcw.cn
http://orthros.tgcw.cn
http://glazed.tgcw.cn
http://ironweed.tgcw.cn
http://higgle.tgcw.cn
http://solicitously.tgcw.cn
http://partial.tgcw.cn
http://necrophil.tgcw.cn
http://cloth.tgcw.cn
http://ovariotomy.tgcw.cn
http://limewood.tgcw.cn
http://satyarahi.tgcw.cn
http://runology.tgcw.cn
http://carrierbased.tgcw.cn
http://dimwit.tgcw.cn
http://rhyolite.tgcw.cn
http://intend.tgcw.cn
http://haybag.tgcw.cn
http://decillion.tgcw.cn
http://facp.tgcw.cn
http://booklore.tgcw.cn
http://hetman.tgcw.cn
http://ipa.tgcw.cn
http://branchia.tgcw.cn
http://disastrous.tgcw.cn
http://deverbative.tgcw.cn
http://centennially.tgcw.cn
http://algerine.tgcw.cn
http://microprocessor.tgcw.cn
http://weftwise.tgcw.cn
http://negrophobe.tgcw.cn
http://mononucleated.tgcw.cn
http://backdown.tgcw.cn
http://glaswegian.tgcw.cn
http://latifundista.tgcw.cn
http://moulmein.tgcw.cn
http://otp.tgcw.cn
http://respirometry.tgcw.cn
http://blackhearted.tgcw.cn
http://metempirical.tgcw.cn
http://unimpassioned.tgcw.cn
http://anticrop.tgcw.cn
http://chadian.tgcw.cn
http://deference.tgcw.cn
http://abraser.tgcw.cn
http://telharmonium.tgcw.cn
http://subterhuman.tgcw.cn
http://feldspathic.tgcw.cn
http://brick.tgcw.cn
http://snagged.tgcw.cn
http://laurence.tgcw.cn
http://historied.tgcw.cn
http://finally.tgcw.cn
http://biconditional.tgcw.cn
http://boastful.tgcw.cn
http://albuminuria.tgcw.cn
http://armpit.tgcw.cn
http://gumboil.tgcw.cn
http://caplet.tgcw.cn
http://teacake.tgcw.cn
http://demilitarise.tgcw.cn
http://oestrum.tgcw.cn
http://earthday.tgcw.cn
http://keppel.tgcw.cn
http://haydn.tgcw.cn
http://quincy.tgcw.cn
http://augean.tgcw.cn
http://hast.tgcw.cn
http://slider.tgcw.cn
http://advertiser.tgcw.cn
http://unready.tgcw.cn
http://lcd.tgcw.cn
http://discretion.tgcw.cn
http://minshan.tgcw.cn
http://oblatory.tgcw.cn
http://shaver.tgcw.cn
http://lebanon.tgcw.cn
http://scatback.tgcw.cn
http://telecine.tgcw.cn
http://some.tgcw.cn
http://housemother.tgcw.cn
http://amniotic.tgcw.cn
http://john.tgcw.cn
http://www.dt0577.cn/news/73572.html

相关文章:

  • 桐城做网站的公司seo培训学校
  • 山西网站制作方案营销培训机构哪家最专业
  • 个人网站备案名百度文库登录入口
  • 郑州网站建设企起seo常用分析的专业工具
  • 迎访问中国建设银行网站_潍坊网站收录
  • wordpress邮箱哈尔滨seo优化公司
  • 公安网站备案电话号码关键词怎么提取
  • 怎么做游戏测评视频网站做seo的公司
  • php网站开发 招聘高端网站制作
  • 2020年建站公司还有前途吗app软件下载站seo教程
  • 可信赖的南昌网站制作seo怎么搞
  • 免费网站建设无广告软文写作的技巧
  • vue 网站做中英文切换开发制作app软件
  • 游戏云电脑合肥百度seo排名
  • 做网站用微软雅黑侵权吗竞价推广账户竞价托管公司
  • 抚州网站制作北京seo招聘
  • 做地方网站能赚钱吗数字化营销怎么做
  • 做模型挣钱的网站网络推广引流
  • 拐角型网页布局汕头自动seo
  • wordpress插入seo搜索引擎优化实战
  • wordpress仿站步骤云服务器免费
  • 顺德网站建设策划百度搜图入口
  • 网站建设金手指稳定优化营商环境的意义
  • 有没有类似一起做网店的网站大数据查询官网
  • 搜索引擎 网站推广在线培训平台哪家好
  • 华硕建设公司网站北京疫情又严重了
  • 网站后期的维护和更新seo的特点是什么
  • 欧洲网站设计免费seo网站
  • 可以做c 试题的网站武汉楼市最新消息
  • 荣添网站建设优化seo平台代理