我试图允许用户将图像共享到设备上的其他应用程序.该图像位于我的应用程序内部存储区域的files /子目录中.它适用于Gmail,但Facebook和Twitter在响应我的意图时都崩溃了.
编辑:Google+也可以.
以下是相关的代码部分.
在Application.xml中
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="org.iforce2d.myapp.MyActivity"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
XML/filepaths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="shared" path="shared"/>
</paths>
Run Code Online (Sandbox Code Playgroud)
以下是我的活动中的共享代码:
File imagePath = new File(getContext().getFilesDir(), "shared");
File newFile = new File(imagePath, "snapshot.jpg");
Uri contentUri = FileProvider.getUriForFile(getContext(),
"org.iforce2d.myapp.MyActivity", newFile);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
List<ResolveInfo> resInfos =
getPackageManager().queryIntentActivities(shareIntent,
PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : resInfos) {
getContext().grantUriPermission(info.activityInfo.packageName,
contentUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
startActivity(Intent.createChooser(shareIntent, "Share image..."));
Run Code Online (Sandbox Code Playgroud)
contentUri
记录时的值是:
content://org.iforce2d.myapp.MyActivity/shared/snapshot.jpg
我只使用Gmail,Facebook和Twitter作为接收应用程序进行了检查,但结果在各种操作系统版本(从2.2.1到4.4.3)中都非常一致,7个设备包含Kindle.
Gmail效果很好.图像缩略图显示在邮件撰写中,并在发送时成功附加到邮件.
Twitter和Facebook都崩溃了,如下所示.
以下是来自logcat的堆栈跟踪,显示了这两个应用程序所遇到的问题,对于它们来说似乎是同样的问题(这取自4.4.3,但错误实际上一直回到2.2. 1尽管错误消息的措辞略有不同):
Caused by:
java.lang.IllegalStateException: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用console.log来调试一些非常简单的Javascript,但它输出的变量值直到console.log调用之后才会更改,此时变量是"类"成员(Chrome 22,Firefox 16).
我期望发生的一个例子是这样的:
var a = 1;
console.log(a);
a += 20;
//console output says a is 1
Run Code Online (Sandbox Code Playgroud)
但如果变量是"类"成员:
var a = new myClass(1);
console.log(a);
a.x += 20;
//console output says a.x is 21
Run Code Online (Sandbox Code Playgroud)
如果控制台没有记录调用日志时存在的值,它何时最终决定记录该值,以及如何解决这个问题!
这里是fwiw的全部代码:
function myClass() {
myClass.myClass.apply(this, arguments);
if (this.constructor === myClass) this.myClass.apply(this, arguments);
};
myClass.myClass = function () {};
myClass.prototype.myClass = function (x_) {
if (x_ === undefined) x_ = 0;
this.x = x_;
}
var a = new myClass(1);
console.log(a);
a.x += 20;
Run Code Online (Sandbox Code Playgroud) 几年来,我一直在使用 mbed 在线编译器来创建 .bin 文件,然后像这样在命令行中使用 ST-LINK/V2 USB 加密狗刷写它们,一切都完美无缺:
st-flash write 01_blink.NUCLEO_F103RB.bin 0x8000000
Run Code Online (Sandbox Code Playgroud)
今天我下载了 STM32CubeIDE for Linux (Fedora 30) 并开始学习本教程,使用 maple mini (STM32F103CBT6)。
构建项目并开始调试运行后,我得到输出:
STMicroelectronics ST-LINK GDB server. Version 5.3.2
Copyright (c) 2019, STMicroelectronics. All rights reserved.
Starting server with the following options:
Persistent Mode : Disabled
Logging Level : 1
Listen Port Number : 61234
Status Refresh Delay : 15s
Verbose Mode : Disabled
SWD Debug : Enabled
Waiting for debugger connection...
Debugger connected
-------------------------------------------------------------------
STM32CubeProgrammer v2.2.0
-------------------------------------------------------------------
Log …
Run Code Online (Sandbox Code Playgroud) (PHP 5.3.6)
我有一个php文件,其中只包含这个文本 - 没有php标签,没有尾随的换行符或任何地方无关的空格:
<div style="border:1px solid green">abc</div>
Run Code Online (Sandbox Code Playgroud)
现在包括这个来自另一个php文件如下(再次,没有任何无关的空白):
<div style="border:1px solid red"><?php include "abc.php" ?></div>
<br />
<div style="border:1px solid red"><div style="border:1px solid green">abc</div></div>
Run Code Online (Sandbox Code Playgroud)
我得到下面的结果.
请注意,第二种方法只是直接使用包含的内容.这些应该像下面的那样,但正如你所看到的那样,include会导致在包含文件的内容之前插入一些奇怪的换行符.我说"很奇怪",因为当我检查输出的来源(通过Chrome的视图源)时,那里看不到任何东西:
当页面的这一部分显示在Chrome的元素检查器中时,似乎有些东西,但究竟是什么我无法分辨:
它似乎只是一个空字符串,但为什么一个空字符串会导致换行,为什么它会在那里首先出现是一个谜.在include语句的末尾添加分号没有任何区别.我想到它可能是一个空字节或13(CR),但仍然不会导致HTML换行符.
有谁知道我怎么能摆脱这个不想要的换行?
我想知道是否有任何C++专家可以对这种奇怪的情况有所了解.Box2D物理引擎附带的一个示例是消息"称为纯虚方法",但仅限于某个编译器(并且仅在发布版本中).
您可能知道Box2D是一个非常可靠的代码块,所以我认为这可能是编译器的问题,特别是考虑到它只发生在这个特定的编译器上.我在Windows7上使用mingw32:
> gcc.exe --version
gcc version 4.4.0 (GCC)
Run Code Online (Sandbox Code Playgroud)
以下是Box2D相关部分的简要摘录.您可以在以下网址查看完整资料来源:
b2Shape.h
b2CircleShape.h
b2CircleShape.cpp
SensorTest.h
//base class
class b2Shape
{
public:
virtual ~b2Shape() {}
virtual b2Shape* Clone(b2BlockAllocator* allocator) const = 0;
};
//sub class
class b2CircleShape : public b2Shape
{
public:
b2CircleShape();
b2Shape* Clone(b2BlockAllocator* allocator) const;
};
inline b2CircleShape::b2CircleShape() {}
b2Shape* b2CircleShape::Clone(b2BlockAllocator* allocator) const
{
void* mem = allocator->Allocate(sizeof(b2CircleShape));
b2CircleShape* clone = new (mem) b2CircleShape;
*clone = *this;
return clone;
}
Run Code Online (Sandbox Code Playgroud)
请注意克隆功能中的新位置.
现在导致问题的执行归结为:
{
b2CircleShape shape;
shape.Clone(allocator); //ok
}
{
b2CircleShape …
Run Code Online (Sandbox Code Playgroud) Andengine Box2D物理体在增加重量时不旋转,否则它完全旋转.我正在做一个玩家可以投掷炸弹的游戏,当玩家用炸弹投掷炸弹时,它的自然重量完全旋转但是当我增加炸弹的重量时炸弹没有旋转.我坚持这里..plz帮助.谢谢.
if (bomb)
{
mScene.detachChild(target);
target = null;
bombFire = new Sprite(mBall2.getX()+mBall2.getWidth()/2,mBall2.getY(),bombFireRegion);
mScene.attachChild(bombFire);
bombBody = PhysicsFactory.createCircleBody(mPhysicsWorld, bombFire,BodyType.DynamicBody, bombFixDef);
bombBody.setMassData(bombMass);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(bombFire, bombBody, true, true));
Vector2 v = new Vector2((xpt-mBall2.getX()),(ypt-mBall2.getY()));
bombBody.applyLinearImpulse(v,bombBody.getWorldCenter());
}
Run Code Online (Sandbox Code Playgroud)