我正在构建一个自定义 Marshmallow Android 版本,我想在第一次启动时向 SD 卡添加一些文件- 具体来说,我希望在创建 DCIM、下载、铃声等的同时创建它们。
默认文件夹结构是何时创建的?
android android-source android-sdcard android-6.0-marshmallow
我的一位同行开发人员编写了intent service
一个 API 调用,然后休眠 2 分钟。醒来后,它再次发送。
下面是代码:
public class GpsTrackingService extends IntentService {
....
@Override
protected void onHandleIntent(Intent intent) {
do{
try{
//make API call here
//then go to sleep for 2 mins
TimeUnit.SECONDS.sleep(120);
} catch(InterruptedException ex){
ex.printStackTrace();
}
} while (preferences.shouldSendGps()); //till the user can send gps.
}
....
}
Manifest
<service android:name=".commons.GpsTrackingService" />
Run Code Online (Sandbox Code Playgroud)
当手机处于活动状态时,这工作正常。但是,每当手机进入打瞌睡模式时,它都无法唤醒。
使用报警管理器会WAKE permission
解决这个问题吗?
我刚刚获得了代码库,需要在今天内解决这个问题。如果有人可以提供帮助,那就太好了。
android android-intentservice android-6.0-marshmallow android-doze
我需要将 WindowManager 与 WindowManagerTypes.SystemOverlay 参数一起使用
在我的项目上启用了此权限
但它是 API < 23 的参数
我使用 API 23 (Android 6.0) 开发
我需要在我的 Android 测试手机的设置 => 应用程序 => 应用程序管理器设置中启用参数“绘制其他应用程序”
我在 Xamarin 中找不到:Settings.ActionManageOverlayPermission 和 Settings.CanDrawOverlays 函数,它是否已实现?
此元素是从 Xamarin.Android 版本 5.1.99 添加的(请参阅下面的链接):
但我不能使用元素。
我使用 java 代码来解释实现问题(见下文),我想做这段代码,但当然是在 C# 中。
爪哇代码
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469;
public void testPermission() {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
Result :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if …
Run Code Online (Sandbox Code Playgroud) permissions overlay android-windowmanager xamarin android-6.0-marshmallow
我正在尝试使用以下代码在我的 SD 卡上创建一个文件夹,但它失败了。这是我写的代码onCreate()
:
File test = new File(Environment.getExternalStorageDirectory(),"my_directory");
if(!test.exists())
{
try
{
if (test.mkdir())
{
Log.d("xxx", "directory created");
}
else
{
Log.d("xxx", "directory creation failed");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
Log.d("xxx","directory already present");
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时没有给出任何异常,它只是打印
directory creation failed
日志。
我也给予了以下许可,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我用的是小米红米note 3,安卓版本是6.0.1。
我有一个浓缩咖啡测试,由于出现 Android 弹出消息而失败Viewing full screen. To exit, swipe down from the top
。
如果我单击Got it
测试运行正常,但我在构建服务器上运行这些测试,我无法手动单击它。
我正在运行的模拟器设备 - Nexus 7 API 23。
有没有一种方法可以禁用此弹出窗口,或者在测试期间单击它,但我不确定它会在什么时候弹出。
关于如何处理这个问题的任何想法请。
这是 Android 抛出的弹出窗口,它破坏了 espresso 测试
因此,我确实收到一条错误消息,如下所示
此行错误 -
onView(withId(R.id.prefuel_total))
.perform(typeText(value), closeSoftKeyboard());
androidx.test.espresso.PerformException: Error performing 'single click - At Coordinates: 1067, 321 and precision: 16, 16' on view 'Animations or transitions are enabled on the target device.
For more info check:
with id: com.ix.xx.staging:id/prefuel_total'.
at androidx.test.espresso.PerformException$Builder.build(PerformException.java:82)
at androidx.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:79)
at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:51)
at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:312)
at androidx.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:173)
at …
Run Code Online (Sandbox Code Playgroud) java android kotlin android-espresso android-6.0-marshmallow
有问题的帽子我不确定是不是一个bug.
如果用户授予权限然后撤消它,则checkSelfPermission似乎会对撤销的权限返回GRANTED.
例如,撤销许可后似乎.CAMERA:
true == ActivityCompat.checkSelfPermission(context, permission.CAMERA)
== PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)
我似乎发现相机被撤销的唯一方法是例外:
10-20 14:25:54.330: E/AndroidRuntime(13954): java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity clip={text/uri-list U:file:///storage/emulated/0/Pictures/JPEG_20151020_142554_399504353.jpg} (has extras) } from ProcessRecord{adc5d77 13954:com.conx2share.conx2share.staging/u0a144} (pid=13954, uid=10144) with revoked permission android.permission.CAMERA
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.os.Parcel.readException(Parcel.java:1599)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.os.Parcel.readException(Parcel.java:1552)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.Activity.startActivityForResult(Activity.java:3917)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.app.Activity.startActivityForResult(Activity.java:3877)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:855)
10-20 14:25:54.330: E/AndroidRuntime(13954): at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:907)
10-20 14:25:54.330: E/AndroidRuntime(13954): at …
Run Code Online (Sandbox Code Playgroud) 在Android M(Android 6)中,我正在使用该方法ActivityCompat.checkSelfPermission()
.
即使我在应用程序设置中手动启用了请求的权限,此方法的结果始终是"权限被拒绝".
这可能是什么原因?
int smsPermission = ActivityCompat.checkSelfPermission(AuthActivity.this, Manifest.permission_group.SMS);
if (smsPermission != PackageManager.PERMISSION_GRANTED)
{
dialog.setCancelable(false);
dialog.setMessage("dialog content");
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
ActivityCompat.requestPermissions(AuthActivity.this, new String[]{Manifest.permission.SEND_SMS}, Constants.REQUEST_SMS_PERMISSION);
dialogInterface.dismiss();
}
});
dialog.show();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用棉花糖连接到Android设备以进行无线调试。
C:\...\sdk\platform-tools>adb connect 192.168.1.103:5555
unable to connect to 192.168.1.103:5555: cannot connect to 192.168.1.103:5555:
No connection could be made because the target machine actively refused it. (10061)
Run Code Online (Sandbox Code Playgroud)
我也尝试过adb connect "192.168.1.103:5556"
,"adb connect 192.168.1.103"
但最终得到了相同的结果。
上面的第一个命令在棉花糖更新之前在我的OnePlus 2上运行正常。
对如何在棉花糖上进行无线调试有帮助吗?
我试图让一个测试应用程序,所以我可以玩的的LocationManager,但我甚至无法获得通过在运行时的新愚蠢的权限请求.我做错了什么,为什么他们这么混乱/复杂?
public class MainActivity extends AppCompatActivity {
private static final int LOCATION_GROUP_PERMISSION_REQUEST = 1;
private boolean locationPermissionGranted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getLocationPermission();
if(locationPermissionGranted) {
LocationManager locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
String provider = LocationManager.GPS_PROVIDER;
try {
Location location = locationManager.getLastKnownLocation(provider);
updateTextView(location);
} catch(SecurityException e) {
Log.e("PERMISSION_DENIED", e.getMessage());
}
}
//registerReceiver(gpsReciever, new IntentFilter("android.location.PROVIDERS_CHANGED"));
}
private void updateTextView(Location location) {
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
TextView view = (TextView) findViewById(R.id.textView);
view.setText(getString(R.string.lat_long_string, latitude, longitude));
} …
Run Code Online (Sandbox Code Playgroud) 我的混合式Cordova Android应用程序使用一个自定义插件,在该插件中,我大约每30分钟执行一次后台工作。到现在为止,我已经使用AlarmManger
了setInexact
报警执行工作。我对该路由唯一真正的问题是,警报无法在重新启动后幸免。鉴于我现在只支持Android的6(API 23)+设备现在我与更换试验AlarmManager
用JobScheduler
。到目前为止,我的努力如下所示
public class UnyService extends JobService
{
@Override
public boolean onStartJob(JobParameters params)
{
UnyHandler.sendMessage(Message.obtain(UnyHandler,1,params));
return true;
}
@Override
public boolean onStopJob(JobParameters params)
{
UnyHandler.removeMessages(1);
return false;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Handler
来执行实际工作。的代码Handler
如下所示
private Handler UnyHandler = new Handler(new Handler.Callback()
{
@Override
public boolean handleMessage(Message msg)
{
Feedback.postBackInfo("Handled it!");
jobFinished((JobParameters)msg.obj,false);
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下代码启动并运行该作业
private void launchTimerJob()
{
timerJob =
(JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(1,new
ComponentName(Utils.packName,UnyService.class.getName()));
builder.setPeriodic(30000);
builder.setPersisted(true);
builder.setBackoffCriteria(30000,JobInfo.BACKOFF_POLICY_LINEAR); …
Run Code Online (Sandbox Code Playgroud) 我非常清楚我在这里解析为Integer的值是Long值.
问题是:为什么它在Pre-Marshmallow工作?
这是我的代码:
public void print(long mili) {
Long serverUptimeSeconds =
(mili - System.currentTimeMillis()) / 1000;
String serverUptimeText =
String.format("%02d%02d%02d%02d",
Math.abs(serverUptimeSeconds) / 86400,
(Math.abs(serverUptimeSeconds) % 86400) / 3600,
((Math.abs(serverUptimeSeconds) % 86400) % 3600) / 60,
((Math.abs(serverUptimeSeconds) % 86400) % 3600) % 60
);
// compiler is giving error at this line in Marshmallow 6.0.1 only
tv.setValue(Integer.parseInt(serverUptimeText), false);
}
Run Code Online (Sandbox Code Playgroud)
我的职责:
public void setValue(int value, boolean withAnimation) {
mCurrentValue = value;
int tempValue = value;
for (int …
Run Code Online (Sandbox Code Playgroud) android ×9
java ×2
permissions ×2
adb ×1
android-doze ×1
integer ×1
kotlin ×1
overlay ×1
xamarin ×1