Android 关于应用程序其他权限中的自启动

如图所示
图片说明

这个自启动怎么用代码设置成默认开启啊

9个回答

这东西很多手机厂商都是自己做的,只能自己跳过去提示用户开启,微信因为跟厂商有合作并且知名度高所以加了默认自启,要想实现需要联系厂家。或者是root手机,别的没办法了

获取root权限后,可以操作。

zull_kos_mos
KosmoSakura 回复smile_邝野: 你可以做一个实验,其实所谓的厂商白名单,不过就是在微信安装后,自启默认处于开启状态。已一般app,安装后是默认关闭状态。这个就算你联系系统产商,对方也不会轻易加你进白名单。这是一场系统程序猿和app程序猿之间的战争
2 年多之前 回复
zanjiaowei
smile_邝野 回复mingyuli: 单独评论一个分给你吧
2 年多之前 回复
zanjiaowei
smile_邝野 回复mingyuli: 好吧,谢谢
2 年多之前 回复
mingyuli
明宇李 一些常规软件手机厂商是会自己添加到他们的白名单里的
2 年多之前 回复
mingyuli
明宇李 回复smile_邝野: 手机厂家把微信qq这些软件设置在了白名单里了
2 年多之前 回复
mingyuli
明宇李 现在自启动权限受各大手机厂商的限制,可以联系厂家设置白名单 一版自启权限适配比较难https://www.jianshu.com/p/5b43b02e16be
2 年多之前 回复
zanjiaowei
smile_邝野 那为啥微信安装后就可以默认打开?
2 年多之前 回复

需要获取root权限

这个是手机开发厂商做的

需要获取root权限的

我也研究过这个,基本上有这么几个思路:1.将自己的app设置成系统应用(需要root等小操作),咱们不是流氓软件,这种思路直接放弃吧。 2.让公司花钱去找手机供应商(一般他们都有自己的系统,比如小米、华为),让他们把自己的app加入到开机自启白名单里。

需要root权限或者找开发商

这个,在正常app的开发中做不到,
像在安卓啊的高版本里面,要获得这些特殊权限,你只能跳转到这个页面,引导用户,让他手动去开启。

在中国市场,安卓高版本的系统中,自启的效果远不及“他起”。
虽是业界毒瘤,但效果确实不错。
比如,你接入了百度的sdk,当用户使用百度的app时,会同时唤醒你的app。

而自启,获得自启权限后,你往往还需要开启至少2条进程,互相守护,唤醒。
但是,一般用户,是很不愿意赋予app这些权限的。

自启动在android7.0不存在的,QQ、微信他们在白名单里,然后通过互拉机制拉起相关的程序,通过极光也可以通过接入了极光存活的应用拉起接入了极光API其他的应用

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android怎么获取程序是否有自启动权限

我集成了推送,需要自启权限,保证消息送达。打开应用,跳转设置界面让用户去手动开启,但不能每次都去设置吧,所以需要判断应用是否获取自启动权限。是自启动的权限,我不做开机接收广播自启,那种还是会死。

Android 程序退出后重新启动程序

最近做个项目,需要让程序退出后,再次启动程序,哪位大佬可以指点一下,

android程序里面 用intent直接跳转到该APP的权限设置页面

如题。 android程序里面 用intent直接跳转到该APP的权限设置页面

怎么让安卓程序不在开始运行的时候自动申请权限

怎么让安卓程序不在开始运行的时候自动申请权限. 我已经设置android:targetSdkVersion="23"但是还是会在打开的时候自动请求一遍数据

三星盖乐世s6开发时,需要打开三星手机自带的“智能管理器”来引导用户打开“自启动”权限,该怎么实现?

三星盖乐世s6开发时,需要打开三星手机自带的“智能管理器”来引导用户打开“自启动”权限,该怎么实现?我使用如下代码,但是报错了。 ``` super.onStart(); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.MANUFACTURER.equals("samsung")) { LogInfo.d("equals samsung"); } ComponentName componentName =new ComponentName("com.samsung.android.sm_cn","com.samsung.android.sm.ui.ram.AutoRunActivity"); intent.setComponent(componentName); startActivity(intent); ``` 报错: ``` 2019-11-13 22:51:49.602 4590-4590/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.intelligentalarmclock, PID: 4590 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.intelligentalarmclock/com.example.intelligentalarmclock.MainActivity}: java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } } from ProcessRecord{2da72bd 4590:com.example.intelligentalarmclock/u0a178} (pid=4590, uid=10178) not exported from uid 1000 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) Caused by: java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } } from ProcessRecord{2da72bd 4590:com.example.intelligentalarmclock/u0a178} (pid=4590, uid=10178) not exported from uid 1000 at android.os.Parcel.readException(Parcel.java:1693) at android.os.Parcel.readException(Parcel.java:1646) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3530) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1526) at android.app.Activity.startActivityForResult(Activity.java:4399) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767) at android.app.Activity.startActivityForResult(Activity.java:4358) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754) at android.app.Activity.startActivity(Activity.java:4682) at android.app.Activity.startActivity(Activity.java:4650) at com.example.intelligentalarmclock.MainActivity.onStart(MainActivity.java:251) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1256) at android.app.Activity.performStart(Activity.java:6959) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2890) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)  at android.app.ActivityThread.-wrap14(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6682)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)  ``` 这是怎么回事?需要什么权限吗?

android开发的应用,后台运行后部分手机会时不时的自动弹出应用画面

android开发的应用,后台运行后部分手机会时不时的自动弹出应用画面,系统集成了极光推送,不知道是什么东西在后台把应用调起来

在首次打开应用需要允许应用访问权限,那么如何通过ADB,在首次时运行有访问存储的权限呢?

现在在做一个测试项目,每次recovery后打开播放器进行播放视频,这个过程是通PC下用ADB控制,现在遇到的问题是,recovery后打开应用需要允许有访问存储的权限,怎么通ADB控制,让应用允许呢,谢谢了。

Android Studio 启动界面 运行无显示

制作了一张图片作为app的启动界面 代码没有错误,可以运行 安装启动后,没有显示载入的图片 而是直接进入MainActivity 启动界面在SplashActivity中 是哪里出问题了呢?

android app退到后台后被杀死进程重启,却留有原来的Activity

android app退到后台后被进程杀死,此时在桌面点击图标会进入第一个Activity,但是回退后,将当前Activity结束掉之后,之前那些Activity还在底部。。。 使用的手机:**小米note3**,其他手机暂时没发现有类似的问题,而且运行的app被频繁杀死,甚至有时退到桌面,打开微信几秒后回来就直接被干掉了 请问:**①app被杀死重启后为何会留有被杀死前打开的Activity,或者说并没有被杀死??**(使用网上所说小米手机的各种解决方法,给app加锁,电量模式里设置等多种方法,不过手机原来这些设置也都是关闭的,故使用给app加锁,测试一次发现并没有原来的Activity残留) ②是否有什么简单办法可以完全恢复app的状态,包括所有Activity,中间有进行网络请求得到数据

安卓程序在什么条件下可以接受广播?

最近在做一个测试程序的时候想到了这个问题,但是由于实验条件有限,没时间做这个测试。希望知道答案的大牛解答一下。 假设一个应用自从安装在手机上以后**从来没有运行过**(包括安装完毕也没点击运行) 1.此应用**能否接受**网络变更(android.net.conn.CONNECTIVITY_CHANGE)等类似的广播?自定义广播? 2.假如手机重启,此应用**能否接受**开机自启动广播?(android.intent.action.BOOT_COMPLETED) 补充:拥有开机启动权限

安卓自己的程序设置开机启动 但很抱歉 已停止运行 怎么办?谢谢

public class MyBroadcastReceive extends BroadcastReceiver { static final String action_boot="android.intent.action.BOOT_COMPLETED"; @Override public void onReceive(Context ctx, Intent intent) { Log.d("BootReceiver", "system boot completed"); if (intent.getAction().equals(action_boot)){ //start service try { Intent s=new Intent(ctx,WatchDogService.class); ctx.startService(s); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } AndroidManifest.xml里权限也加了 可是一开机就显示”很抱歉 程序***已停止运行“ 但是正常运行程序不会报错

android程序中报病毒的错误

我在Play store 中加载了一个程序,有评论说有一个病毒,有时候强行关闭电话后自己会重新启动。应用程序的代码非常简单:只有一个activity ,还有几个spots,要么能听到,要么设置为铃声。 程序中的代码: b1_2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(saveas(soundid,save_name)){ Toast.makeText(Main.this, "The sound was set as ringtone!", Toast.LENGTH_LONG).show(); }; } }); public boolean saveas(int ressound,String filename){ byte[] buffer=null; InputStream fIn = getBaseContext().getResources().openRawResource(ressound); int size=0; try { size = fIn.available(); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block return false; } String path="/sdcard/media/ringtones/"; boolean exists = (new File(path)).exists(); if (!exists){new File(path).mkdirs();} FileOutputStream save; try { save = new FileOutputStream(path+filename); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block return false; } catch (IOException e) { // TODO Auto-generated catch block return false; } sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "clip_"+save_name); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.ARTIST, "clip"); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); values.put(MediaStore.Audio.Media.IS_ALARM, true); values.put(MediaStore.Audio.Media.IS_MUSIC, true); //Insert it into the database Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); Uri newUri= this.getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri( this, RingtoneManager.TYPE_RINGTONE, newUri); return true; } 需要的权限是: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 没网也能正常运行,但是在google play store 中有一个直接的链接能链到我的开发页面,为避免程序崩溃,我使用下面的代码解决: (if link is pressed) if (isOnline()){ open page } else { do nothing } public boolean isOnline() { boolean connectedWifi = false; boolean connectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] networks = cm.getAllNetworkInfo(); for (NetworkInfo ni : networks) { if ("WIFI".equalsIgnoreCase(ni.getTypeName())) if (ni.isConnected()) connectedWifi = true; if ("MOBILE".equalsIgnoreCase(ni.getTypeName())) if (ni.isConnected()) connectedMobile = true; } return connectedWifi || connectedMobile; }

Android 悬浮窗获取点击拖拽事件

之前参照网上例子写过一个demo,实现在Activity中点击最小化按钮,将该Activity finish,并启动servie生成一个悬浮按钮,可点击也可拖拽; 最近工作需要也做一个相似的悬浮窗,悬浮按钮生成了,App被Home也能存在,不会 消失,但该悬浮按钮却没法捕获点击和拖拽事件。 这两个代码几乎一摸一样,请大神们帮忙看下是哪里出的问题,谢谢! 代码如下: package com.example.menqi.myapplication; import android.app.Service; import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; import android.os.IBinder; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; public class MyService extends Service { private WindowManager mWindowManager; private WindowManager.LayoutParams mLayoutParams; /** * float的布局view */ private View mFloatView; private ViewGroup glSurfaceView; private int mFloatWinWidth,mFloatWinHeight;//悬浮窗的宽高 //private int mFloatWinMarginTop,mFloatWinMarginRight; public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { createWindowManager(); createFloatView(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); removeFloatView(); } private void createWindowManager() { // 取得系统窗体 mWindowManager= (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); //计算得出悬浮窗口的宽高 DisplayMetrics metric =new DisplayMetrics(); mWindowManager.getDefaultDisplay().getMetrics(metric); int screenWidth = metric.widthPixels; mFloatWinWidth = screenWidth *1/3; mFloatWinHeight=mFloatWinWidth*4/3; //mFloatWinMarginTop= (int)this.getResources().getDimension(R.dimen.rkcloud_av_floatwin_margintop); //mFloatWinMarginRight= (int)this.getResources().getDimension(R.dimen.rkcloud_av_floatwin_marginright); // 窗体的布局样式 // 获取LayoutParams对象 mLayoutParams=new WindowManager.LayoutParams(); // 确定爱悬浮窗类型,表示在所有应用程序之上,但在状态栏之下 //TODO? 在android2.3以上可以使用TYPE_TOAST规避权限问题 mLayoutParams.type= WindowManager.LayoutParams.TYPE_TOAST;//TYPE_PHONE mLayoutParams.format= PixelFormat.RGBA_8888; mLayoutParams.flags= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; // 悬浮窗的对齐方式 mLayoutParams.gravity= Gravity.LEFT| Gravity.TOP; // 悬浮窗的位置 mLayoutParams.x=70; mLayoutParams.y=210; mLayoutParams.width=mFloatWinWidth; mLayoutParams.height=mFloatWinHeight; } //开始触控的坐标,移动时的坐标(相对于屏幕左上角的坐标) private int mTouchStartX, mTouchStartY, mTouchCurrentX, mTouchCurrentY; //开始时的坐标和结束时的坐标(相对于自身控件的坐标) private int mStartX, mStartY, mStopX, mStopY; //判断悬浮窗口是否移动,这里做个标记,防止移动后松手触发了点击事件 private boolean isMove; /** * 创建悬浮窗 */ private void createFloatView() { LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); mFloatView= inflater.inflate(R.layout.floatlayout, null); glSurfaceView= (ViewGroup)mFloatView.findViewById(R.id.VOIPFloatView); //glSurfaceView.setPreserveEGLContextOnPause(true); glSurfaceView.setKeepScreenOn(true); mWindowManager.addView(mFloatView,mLayoutParams); mFloatView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v,MotionEvent event) { int action = event.getAction(); /*if(MotionEvent.ACTION_DOWN == action) { mStartX=mLastX= (int) event.getRawX(); mStartY=mLastY= (int) event.getRawY(); }else if(MotionEvent.ACTION_UP == action) { int dx = (int) event.getRawX() -mStartX; int dy = (int) event.getRawY() -mStartY; if(Math.abs(dx) >5|| Math.abs(dy) >5) { return true; } }else if(MotionEvent.ACTION_MOVE == action) { int dx = (int) event.getRawX() -mLastX; int dy = (int) event.getRawY() -mLastY; mLayoutParams.x=mLayoutParams.x- dx; mLayoutParams.y=mLayoutParams.y+ dy; mWindowManager.updateViewLayout(mFloatView,mLayoutParams); mLastX= (int) event.getRawX(); mLastY= (int) event.getRawY(); } return false;*/ switch (action) { case MotionEvent.ACTION_DOWN: isMove = false; mTouchStartX = (int) event.getRawX(); mTouchStartY = (int) event.getRawY(); mStartX = (int) event.getX(); mStartY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: mTouchCurrentX = (int) event.getRawX(); mTouchCurrentY = (int) event.getRawY(); mLayoutParams.x += mTouchCurrentX - mTouchStartX; mLayoutParams.y += mTouchCurrentY - mTouchStartY; mWindowManager.updateViewLayout(mFloatView, mLayoutParams); mTouchStartX = mTouchCurrentX; mTouchStartY = mTouchCurrentY; break; case MotionEvent.ACTION_UP: mStopX = (int) event.getX(); mStopY = (int) event.getY(); if (Math.abs(mStartX - mStopX) >= 1 || Math.abs(mStartY - mStopY) >= 1) { isMove = true; } break; } //如果是移动事件不触发OnClick事件,防止移动的时候一放手形成点击事件 return isMove; } }); mFloatView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ToVOIPActivity(); MyService.this.stopSelf(); } }); /*VideoRendererGui.setView(glSurfaceView, new Runnable() { @Override public void run() { if(WebRtcHelperEx.getInstance().isWebRtcChanelAlive()) { WebRtcHelperEx.getInstance().updateVideoUI(WebRtcHelperEx.latestLocalVideoSize,WebRtcHelperEx.latestRemoteVideoSize); } } }); if(WebRtcHelperEx.getInstance().isWebRtcChanelAlive()) { LogEx.d(TAG,"createFloatView: webrtc instance is alive and we will call resetRenders"); WebRtcHelperEx.getInstance().resetRenders(); WebRtcHelperEx.getInstance().updateVideoUI(WebRtcHelperEx.VIDEOSIZE_SMALL,WebRtcHelperEx.VIDEOSIZE_BIG); }*/ } private void removeFloatView() { if(mFloatView != null && mWindowManager != null) { mWindowManager.removeView(mFloatView); } } /** * 单击后回到@WebRTCActivity以切换为大尺寸页面 */ private void ToVOIPActivity() { //TODO跳转到Activity Intent intentToActivity = new Intent(this, Main2Activity.class);//WebPhoneIncomingCallActivity来电页面 intentToActivity.setFlags(FLAG_ACTIVITY_NEW_TASK); startActivity(intentToActivity); } } layout <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/VOIPFloatView" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageButton android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/avcallfloat" android:scaleType="centerInside" /> </FrameLayout> </RelativeLayout> </RelativeLayout>

安卓平板怎么设置使其只能访问固定的某一个app

如题 为了要使某一款平板只能使用我们的一个app 其他软件都不能使用 我们需要做什么?急!!!

使用appium进行测试,app运行过程中点击手机系统的弹框后,如何定位app里的控件?

app运行的过程是这样的:首次启动app,自动进入到过渡页,然后自动进入登陆页,此时app向手机请求获取存储控件的权限,这时,手机系统会弹出一个询问框,询问是否同意,点击“始终允许”,询问框消失,点击app登陆页的TextView(手机号登陆),跳转到手机号登录页面进行登陆... 遇到的问题: 首次启动app后,自动进入到了过渡页和登录页,点击完获取存储控件权限的系统弹框后,定位不到app里的TextView(手机号登陆)了,尝试了用ID或者xpath,都不行,请问是什么问题呢?如何解决? 我对这个问题的分析: 是不是我点击系统弹框后,改变了context,导致我在查找app里的控件时context不对? 代码截图: ![图片说明](https://img-ask.csdn.net/upload/201710/18/1508282251_660969.png)

电话录音导出的文件为什么不能播放?

写了一个电话录音的程序,但是在向SD卡中刻录声音的时候,并不是期望的3gp格式,无法进行播放,不知道是什么原因? 代码如下 配置文件: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.xushuai.phonelistener" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"> <service android:name=".PhoneService"></service> <receiver android:name=".BootBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> <!-- 电话状态监听权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!--向SD卡写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 在SD卡中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 刻录权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO"/> </manifest> 刻录的业务类: import java.io.File; import android.app.Service; import android.content.Context; import android.content.Intent; import android.media.MediaRecorder; import android.os.Environment; import android.os.IBinder; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class PhoneService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } //在创建服务时,进行一些初始化 @Override public void onCreate() { super.onCreate(); //获取电话管理服务 TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);//通过监听对象对呼叫状态进行监听 } private final class PhoneListener extends PhoneStateListener{ private String incomingNumber; private File file; private MediaRecorder mediaRecorder; //当呼叫状态改变时,调用该方法 @Override public void onCallStateChanged(int state, String incomingNumber) { try { switch (state) { case TelephonyManager.CALL_STATE_RINGING://来电 this.incomingNumber = incomingNumber; break; case TelephonyManager.CALL_STATE_OFFHOOK://接通电话 file = new File(Environment.getExternalStorageDirectory(),incomingNumber+System.currentTimeMillis()); mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//指定声音来源:话筒,这里只能录打电话的声音,而不能录入传入的声音 //mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置音频输出格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//THREE_GPP);//设置音频输出格式 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码格式 mediaRecorder.setOutputFile(file.getAbsolutePath()); mediaRecorder.prepare(); mediaRecorder.start();//开始录音 case TelephonyManager.CALL_STATE_IDLE://挂断电话后回归到空闲状态 if(mediaRecorder!=null) mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; break; } } catch (Exception e) { e.printStackTrace(); } } } } 通过广播接收者进行应用的注册,这里的广播接收者监听的是手机启动的广播 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent service = new Intent(context,PhoneService.class); context.startService(service);//Intent激活组件(Service) } }

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

立即提问
相关内容推荐