AlarmManager.setAndAllowWhileIdle()和 和有什么区别AlarmManager.setExactAndAllowWhileIdle()?它们对 Android 6.0 (Marshmallow) API 中引入的 Doze 模式有何影响?
android android-alarms android-6.0-marshmallow android-doze-and-standby
我对 android M 及更高版本的新权限模型有点好奇,尤其是“shouldShowRequestPermissionRationale()”方法。在文档中:
为了帮助查找用户可能需要解释的情况,Android 提供了一个实用方法 shouldShowRequestPermissionRationale()。如果应用程序先前已请求此权限并且用户拒绝了该请求,则此方法返回 true。
注意:如果用户过去拒绝了权限请求并在权限请求系统对话框中选择了不再询问选项,则此方法返回 false。如果设备策略禁止应用拥有该权限,该方法也会返回 false。
好的,用户肯定拒绝了权限。现在在同一页面的代码片段中:
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the …Run Code Online (Sandbox Code Playgroud) 我正在使用自动通话记录器应用程序,我可以使用MediaRecorder.AudioSource.VOICE_CALL在 android Marshmallow 下录制语音通话,从 android marshmallow 无法使用 VOICE_CALL 录制语音通话。我设法使用MediaRecorder.AudioSource.MIC进行录制,但这里传入的语音没有被录制,我想在正常模式下录制语音通话,而不是在扬声器模式下。我尝试了很多例子并搜索了很多然后我写了这个问题。请帮我。谷歌播放有一个应用程序可以记录通话中的双方语音,名为“通话记录器 - 自动通话记录器”它在棉花糖中是如何工作的,还有其他方法可以记录通话吗?
int Media;
if (Build.VERSION.SDK_INT >= 24) {
Media = MediaRecorder.AudioSource.VOICE_COMMUNICATION;
}else if (Build.VERSION.SDK_INT==23){
Media = MediaRecorder.AudioSource.MIC;
}
else{
Media = MediaRecorder.AudioSource.VOICE_CALL;
}
CallRecord callRecord = new CallRecord.Builder(this)
.setRecordFileName("")
.setRecordDirName("CallRecord")
.setRecordDirPath(Environment.getExternalStorageDirectory().getPath())
.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB)
.setAudioSource(Media)
.setShowSeed(true)
.build();
callRecord.startCallRecordService();
Run Code Online (Sandbox Code Playgroud) android phone-call recording android-6.0-marshmallow call-recording
路径是:
设置 - >应用程序 - >(在应用程序列表中)XXX应用程序 - >权限.
以下是我手动进入"管理权限"页面时的日志.
08-11 02:36:02.327:I/ActivityManager(775):从uid 1000开始u0 {act = android.intent.action.MANAGE_APP_PERMISSIONS cmp = com.android.packageinstaller/.permission.ui.ManagePermissionsActivity(has extras)}在显示0
此外,我搜索了两个关键词,MANAGE_APP_PERMISSIONS并ManagePermissionsActivity在Android"M"预览1的源代码中找不到.
有人可以帮忙吗?
我目前正在开发一款Android应用程序,其中包括一个视频播放器,它使用Android的VideoView通过HTTP加载mp4视频文件.它适用于安卓版本5.1.1的Nexus 4以及安装了Android 4.4的平板电脑.
但是,使用Android 6.0后,视频流会在几分钟后意外终止(在Nexus 5和模拟器上测试).正如您在日志输出中看到的那样,流播放大约5分钟,直到发生java.net.ProtocolException,另一个播放 1分钟,直到缓冲区为空.
10-16 11:08:21.030 4657-4657/...app D/video: start
10-16 11:08:21.060 4657-4657/...app W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://someurl...mp4
10-16 11:08:29.330 4657-4657/...app D/MediaPlayer: getMetadata
10-16 11:08:29.360 4657-4657/...app D/video: prepared
10-16 11:08:29.470 4657-4671/...app W/MediaPlayer: info/warning (3, 0)
10-16 11:09:19.930 4657-4664/...app W/art: Suspending all threads took: 10ms
10-16 11:14:32.550 4657-4664/...app W/art: Suspending all threads took: 10ms
10-16 11:23:46.940 4657-4671/...app W/MediaHTTPConnection: readAt 121022400 / 22592 => java.net.ProtocolException: …Run Code Online (Sandbox Code Playgroud) java android android-mediaplayer android-videoview android-6.0-marshmallow
我有活动A启动活动B.此活动然后请求READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE.在Android 6.0上,这会打开权限对话框(一旦对话框弹出就会立即销毁活动B).但是,无论用户选择什么,系统都将返回活动A.
请求其他权限在其他地方工作正常,但我认为外部存储权限是那些,正如文档警告的那样,"需要重新启动应用程序","系统将重新创建活动堆栈".
我的问题是活动B永远不会重新创建,更不用说onRequestPermissionsResult被调用了.我原以为"重新创建活动堆栈"涉及再次启动活动B,理想情况下onRequestPermissionResult是在它上面调用它.我该怎么办呢?
该RecyclerView如果与建立搞砸Marshmallow (Android 23).
我使用RecyclerView填充的项目列表,当向右滑动将删除该项目.删除该项目工作正常.但是RecyclerView在删除项目后向上滚动会在删除的项目上方的项目上创建空白区域.
我在这里使用示例项目https://github.com/chrisbanes/cheesesquare与最新的Android版本(Marshmallow)
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.support.android.designlibdemo"
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
}
Run Code Online (Sandbox Code Playgroud)
并添加滑动以关闭代码
private void setItemDismiss(final RecyclerView recyclerView) {
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.RIGHT, ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
((SimpleStringRecyclerViewAdapter)recyclerView.getAdapter()).removeItemAt(position);
}
};
ItemTouchHelper itemTouchHelper = …Run Code Online (Sandbox Code Playgroud) 我正在实施一个RecyclerView内部ScrollView.为了在整个页面上只有一个滚动行为,我实现了一个NonScrollRecyclerView版本.实施如下:
public class NonScrollRecyclerView extends RecyclerView {
public NonScrollRecyclerView(Context context) { super(context); }
public NonScrollRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
if(ev.getAction() == MotionEvent.ACTION_MOVE)
return true;
return super.dispatchTouchEvent(ev);
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我将我的构建和目标设置更新到SDK 23,我就无法滚动包含该页面的页面NonScrollRecyclerView.具体问题是页面滚动正常,直到我到达回收站视图部分,一旦我滚动到此视图,我无法向上或向下滚动.
我不喜欢SDK 22及以下版本
我的xml如下:
XML @layout/rv包含回收器视图
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_gray">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_gray"
android:orientation="vertical">
<include
layout="@layout/row_mall_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cv_mall_header" …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Gallery中获取图像并将其设置为imageview,但在Android 6中存在一些权限问题.以下是要求许可的方法.我应该要求读外部存储还是写外部存储?
这是我到目前为止所做的:
private static final int READ_CONTACTS_PERMISSIONS_REQUEST = 1;
public void getPermissionToReadExternalStorage() {
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(
Manifest.permission.READ_EXTERNAL_STORAGE)) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
READ_CONTACTS_PERMISSIONS_REQUEST);
}}}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String permissions[],
@NonNull int[] grantResults){
// Make sure it's our original READ_CONTACTS request
if (requestCode == READ_CONTACTS_PERMISSIONS_REQUEST) {
if (grantResults.length == 1 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "Read Contacts permission granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "Read Contacts permission denied", Toast.LENGTH_SHORT).show();
}
} else { …Run Code Online (Sandbox Code Playgroud) 我注意到Android 6.0设备上的音频流应用程序存在问题.音频流通过网络连接通过HLS完成.音频回放发生在具有活动通知的前台服务中.我注意到的是,当应用程序进入打盹模式/应用程序待机状态时,wifi连接会丢失并且播放暂停.我的服务位于前台,并且有一个有效的通知,根据文档,这应该使我的应用程序不会被中断.我还获得并维护一个Wifi锁.我已经阅读了有关将应用程序列入白名单的信息,但是像Spotify这样的应用程序不会请求任何特殊权限来避免此问题.有什么想法或建议吗?
android android-wifi android-6.0-marshmallow android-doze-and-standby